首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql最佳实践:单字段、多字段或第二表中的列表/数组

MySql最佳实践:单字段、多字段或第二表中的列表/数组
EN

Stack Overflow用户
提问于 2011-08-09 03:41:36
回答 2查看 3.8K关注 0票数 2

好的,我将处理大约1,000,000件物品,这些物品将被有限数量的商店分享。商店的数量限制在5家左右,但这可能会发生变化。products表已经管理了大约60到70个字段。

我正在考虑以下三种方法:

  1. 将这些值内爆到一个小的varchar中,比如大约20个字符长,用一个分隔符可以存储大约10个与产品相关联的存储。MySQL选择可以使用类似于‘%_~_

还有很多关于使用MySQL过程的讨论。

Pros:一个字段,易于容纳更多的存储,使用的内存更少?

Cons:文本搜索,需要更长的时间?

  • --这将是最简单的,也可能是最好的方法,只为每个字段创建一个TINYINT (1)和一个新字段。问题是,如果增加新的商店,就必须增加新的领域,从而改变数百万种产品。

Pros:易于选择

(future-proofing)

  • The Cons:添加存储需要改变表结构,需要管理更多字段--如果它们沿着标准响应线有20家商店,我希望是使用链接表将产品与商店关联起来,只有两个字段表。我担心的是,如果大多数产品被大多数商店使用,那么突然间,该表中可能会有大约500万行。

我可以分解链接表以减少它们的行数,例如,通过产品名称的第一个字母,并有26个链接表。

Pros:LEFT易于使用

Cons:几乎每个查询都需要搜索500万个链接表,除非出现了

我确实应该结合一些测试来找出最佳的响应/处理时间,但这需要一些时间。我很想知道你最好的解决方案是如何保持数据的未来-更多的商店和有效存储的证明。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-09 04:48:53

在正反两方面,你忽略了一个非常重要的考虑因素:参考完整性。一个快速的数据库可以让你做简单的查询,如果它充满了破碎的数据,那么它是无用的,它只会让你更快地犯错误,而犯错误是人类最不需要帮助的事情。唯一允许外键(即引用完整性)的选项是选项(3)。

链接表也是处理这类事情的标准方法,而数据库通常是用来很好地处理标准用例的。

就(1)而言,执行LIKE '%x%'几乎每次都会执行一次表扫描,而表扫描是您最不想做的事情。您还必须确保在字符串的开头和结尾都有|分隔符,否则您需要三个(或一个正则表达式),而不是一个。有些数据库可以为LIKE 'x%'使用索引,但这不适用于您的情况。

方法(2)使用太多列,您的查询将变得一团糟,您的表将太宽。您还必须确保一个表中的每一行在另一个表中都有相应的列。

票数 7
EN

Stack Overflow用户

发布于 2014-09-21 05:37:21

嘿,你有没有考虑过存储值,然后用位运算来获取它们.就像这样给每个商店分配一个id : 1,2,4,8,16,32,64,128.只需在item表本身中添加一个列来存储单个值,例如:如果项存在于id为1、4、32的存储区中,则字段将存储37,在检索时,您可以在查询中直接使用&操作,以查看特定存储中是否存在项,或者不存在这样的内容:

代码语言:javascript
复制
select * from item where store_id&1;
select * from item where store_id&4;
select * from item where store_id&32; 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6991134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档