好的,我将处理大约1,000,000件物品,这些物品将被有限数量的商店分享。商店的数量限制在5家左右,但这可能会发生变化。products表已经管理了大约60到70个字段。
我正在考虑以下三种方法:
还有很多关于使用MySQL过程的讨论。
Pros:一个字段,易于容纳更多的存储,使用的内存更少?
Cons:文本搜索,需要更长的时间?
Pros:易于选择
(future-proofing)
我可以分解链接表以减少它们的行数,例如,通过产品名称的第一个字母,并有26个链接表。
Pros:LEFT易于使用
Cons:几乎每个查询都需要搜索500万个链接表,除非出现了
我确实应该结合一些测试来找出最佳的响应/处理时间,但这需要一些时间。我很想知道你最好的解决方案是如何保持数据的未来-更多的商店和有效存储的证明。
发布于 2011-08-09 04:48:53
在正反两方面,你忽略了一个非常重要的考虑因素:参考完整性。一个快速的数据库可以让你做简单的查询,如果它充满了破碎的数据,那么它是无用的,它只会让你更快地犯错误,而犯错误是人类最不需要帮助的事情。唯一允许外键(即引用完整性)的选项是选项(3)。
链接表也是处理这类事情的标准方法,而数据库通常是用来很好地处理标准用例的。
就(1)而言,执行LIKE '%x%'几乎每次都会执行一次表扫描,而表扫描是您最不想做的事情。您还必须确保在字符串的开头和结尾都有|分隔符,否则您需要三个(或一个正则表达式),而不是一个。有些数据库可以为LIKE 'x%'使用索引,但这不适用于您的情况。
方法(2)使用太多列,您的查询将变得一团糟,您的表将太宽。您还必须确保一个表中的每一行在另一个表中都有相应的列。
发布于 2014-09-21 05:37:21
嘿,你有没有考虑过存储值,然后用位运算来获取它们.就像这样给每个商店分配一个id : 1,2,4,8,16,32,64,128.只需在item表本身中添加一个列来存储单个值,例如:如果项存在于id为1、4、32的存储区中,则字段将存储37,在检索时,您可以在查询中直接使用&操作,以查看特定存储中是否存在项,或者不存在这样的内容:
select * from item where store_id&1;
select * from item where store_id&4;
select * from item where store_id&32; https://stackoverflow.com/questions/6991134
复制相似问题