在MYSQL中为大字符串 (varchar) (大致为100个字符)设置唯一约束可能会带来什么不利影响:
查询的长度会影响读写的性能吗?(除了用于记帐的磁盘/内存使用外)。
谢谢
发布于 2019-03-15 22:22:02
几个问题。索引中列的大小有限制(191,255,767,3072等,取决于各种情况)。
您的列符合限制.
只需为该列设置一个UNIQUE或PRIMARY键即可。这里有一些轻微的性能问题,但是要记住这一点:获取一行比涉及用于定位它的键的任何数据类型问题都要花费更多。
你的专栏不适合.
现在,解决办法变得丑陋起来。
INDEX foo(50))存在许多问题和效率低下。UNIQUE foo(50)完全错了。它声明前50个字符必须是唯一的,而不是整个列。(如果需要的话,我会详细说明。)
获取一行(假设语句被解析并且PRIMARY KEY可用)。
TEXT/BLOB的额外块。如果下一步是比较两个字符串(用于联接或ORDER ),那么对扫描的一个简单的子例程调用(不管有多少个字符)。(好,大多数utf8排序规则都不是“简单”的。)是的,比较两个INT会更快。
磁盘空间
INT是否应该用于PRIMARY KEY而不是VARCHAR(100)?那得看情况。
PRIMARY KEY副本。这意味着,一个PK,即VARCHAR(100),使得二级索引比如果PK是INT时更大。INT是更大的方法!速度
SELECT的所有列都位于辅助索引中,则查询可以完全在索引的BTree中执行。(“覆盖索引”,如EXPLAIN中“使用索引”所示)。这有时是一个有价值的优化。INT id可能比简单地使用庞大的VARCHAR作为PK要慢。每一宗案件都应根据其权衡作出判断;我不是在作笼统的陈述。https://stackoverflow.com/questions/55184204
复制相似问题