mysql:在字符串类型的列上创建索引,建议指定索引前缀长度

2023-12-13 06:29:56

https://dev.mysql.com/doc/refman/8.2/en/create-index.html#create-index-column-prefixes

  • 在字符串类型的列上创建索引,建议指定索引前缀长度,而没有必要用整个列来创建索引。因为用前面的字符创建索引,查询时并不会比在整列上创建索引慢很多。用前面的部分字符区分度已经很好。而且,只用前面的字符创建索引,可以使索引大大减小,节约磁盘空间,很可能提升插入的速度。

  • 根据实际文本区分度决定索引长度,建议不要超过30个字符。可以使用SELECT COUNT(DISTINCT LEFT(列名, 索引长度)) /COUNT(*) FROM 表名;来查询区分度,例如SELECT COUNT(DISTINCT LEFT(DESCRIPTION, 3)) /COUNT(*) FROM test_table;查询test_table表中DESCRIPTION这列前3个字符的区分度:
    在这里插入图片描述

  • 指定索引前缀长度使用col_name(length)语法。例如CREATE INDEX index_name ON table_name (column_name(length));,其中index_name 表示索引名称,table_name 表示表名,column_name表示列的名称,length表示用该列的前面多少个字符创建索引。

  • 指定的索引前缀长度要小于等于列声明的最大长度。例如,一个VARCHAR列声明的最大长度是30个字符,那么索引前缀长度不能超过这个值。

文章来源:https://blog.csdn.net/panghuangang/article/details/134956070
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。