列alo是tinytext(平均长度:两个字符)
我最常查询的是
select * from table where .... order by alo=''
在alo上建立索引会更快吗?
alo的确切内容并不重要-排序仅基于alo是否为空的问题。
为什么(不能)提高速度?
答案 0 :(得分:0)
我认为我们只是在谈论
select * from table where .... order by alo=''
情况1:无索引。整个表格将始终被扫描。
情况2:WHERE
中的某些内容可以使用索引。那么该索引可能会有所帮助。
情况3:alo
中未提及WHERE
。索引alo
将无济于事。当索引列隐藏在函数中时,MySQL无法使用索引。在此查询中,alo=''
实际上是一个函数调用。
说ORDER BY alo
可以使用INDEX(alo)
。 并且它会有类似的结果。好吧,实际上alo=''
会在非空格之后对空格进行排序。因此,您可能需要ORDER BY alo DESC
才能获得空白。此外,NULL
值可能还会增加其他皱纹。
与此同时,还有另一种优化...不要使用TINYTEXT
;相反,请使用VARCHAR(..)
和适当的最大值(原因与复杂查询中的临时表有关,对您的查询可能无关紧要。)而且,您无法为任何类型的TEXT
列编制索引。