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个字符,那么索引前缀长度不能超过这个值。