列alo为tinytext(平均长度:两个字符)我最常问的是
select * from table where .... order by alo=''
我在alo上做索引会更快吗?alo的确切内容并不重要—排序只基于alo是否为空的问题。为什么它不能提高速度?
smdncfj31#
我想我们只是在谈论
案例1:没有索引。将始终扫描整个表。案例二:某件事 WHERE 可能需要索引。那么这个索引可能会有所帮助。案例3: alo 在报告中没有提到 WHERE . 索引 alo 不会有帮助的。当索引列隐藏在函数中时,mysql不能使用索引。在这个查询中, alo='' 实际上是一个函数调用。说 ORDER BY alo 可能需要 INDEX(alo) . 它也会有类似的结果。嗯,实际上 alo='' 在非空格之后排序空格。所以你可能需要 ORDER BY alo DESC 先得到空白。此外, NULL 值可能会增加另一条皱纹。同时,还有另一个优化。。。不要使用 TINYTEXT ; 相反,使用 VARCHAR(..) 使用合适的max(原因与复杂查询中的temp表有关,可能与您的查询无关)此外,您不能索引任何类型的表 TEXT 列。
WHERE
alo
alo=''
ORDER BY alo
INDEX(alo)
ORDER BY alo DESC
NULL
TINYTEXT
VARCHAR(..)
TEXT
1条答案
按热度按时间smdncfj31#
我想我们只是在谈论
案例1:没有索引。将始终扫描整个表。
案例二:某件事
WHERE
可能需要索引。那么这个索引可能会有所帮助。案例3:
alo
在报告中没有提到WHERE
. 索引alo
不会有帮助的。当索引列隐藏在函数中时,mysql不能使用索引。在这个查询中,alo=''
实际上是一个函数调用。说
ORDER BY alo
可能需要INDEX(alo)
. 它也会有类似的结果。嗯,实际上alo=''
在非空格之后排序空格。所以你可能需要ORDER BY alo DESC
先得到空白。此外,NULL
值可能会增加另一条皱纹。同时,还有另一个优化。。。不要使用
TINYTEXT
; 相反,使用VARCHAR(..)
使用合适的max(原因与复杂查询中的temp表有关,可能与您的查询无关)此外,您不能索引任何类型的表TEXT
列。