在MySQL中索引VARCHAR
作者:互联网
与INT字段相比,VARCHAR字段上的索引性能是相同还是更差?
我有一个带有两个字段的表(均为VARCHAR).我想在第一列上创建索引.我有两件事.
1.在第一个字段上直接创建索引.
2.在第一个字段中为每个VARCHAR分配一个整数,并将其存储在表中.然后用整数替换第一列中的VARCHAR,并在第一列上创建另一个表和索引(在这种情况下,它将是整数列).我将在这里得到两个不同的表.
另外,如果我有4个或5个表具有相同的第一个字段,并且必须在每个表的第一个字段上创建索引,那么第二种方法是否可以提供更好的性能?
提前致谢.
解决方法:
VARCHAR()列上的索引确实比固定长度字段(如INT或BIGINT)上的索引效率稍低.但事实并非如此.
您可能想使用第二个包含文本字符串编号列表的表的唯一可能情况是:应用程序中不同文本字符串的数量远小于表中的行数.为什么会这样呢?例如,文本字符串可能是所谓的“controlled vocabulary.”中的单词.例如,音乐曲目的类型类似“摇滚”,“古典”或“嘻哈”.在这样的应用程序中允许像“南加州alt-surf-rock”这样的任意类型都是毫无意义的.
不要想太多.请记住,数据库服务器开发人员花费了大量时间来优化其索引的性能.您几乎不可能做得比他们做的更好,尤其是如果您必须在系统中引入额外的表和约束时.
根据需要将索引放在VARCHAR()列上.
(另一个因素:排序规则被烘焙到VARCHAR()列的索引中.如果您像建议的那样构建自定义索引方案,则必须处理代码中的这种复杂性.这是一个臭名昭著的难题.)
有趣的事实:在过去的计算系统(所有酷孩子都拥有T1线)中,系统提供了称为“原子”的对象.这些是带有ID号的文本字符串.例如,原子在xlib function call XInternAtom()
and related functions的X窗口系统中显示.为什么?部分是为了节省内存和网络带宽,这比现在还稀缺.部分出于本文前面提到的“受控词汇”目的.
标签:query-performance,indexing,sqldatatypes,mysql 来源: https://codeday.me/bug/20191025/1930862.html