【问题标题】:optimize mysql - will index improve in this case?优化 mysql - 在这种情况下索引会改善吗?
【发布时间】:2018-11-25 13:52:04
【问题描述】:

alo 列是 tinytext(平均长度:两个字符)

我最常问的问题是

select * from table where .... order by alo=''

在alo上做索引会更快吗?

alo 的确切内容无关紧要 - 排序仅基于 alo 是否为空的问题。

为什么它(不)提高速度?

【问题讨论】:

  • 我们没有足够的信息知道。许多事情会影响查询的执行速度。索引就是其中之一。如果我们要帮助您,我们需要了解更多信息。
  • order by alo 如果 alo 被索引,order by alo='' 肯定会更快,但我怀疑。此操作的结果没有被索引,在运行时没有计算任何内容。

标签: mysql optimization indexing


【解决方案1】:

我假设我们只是在谈论

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 列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2012-06-20
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    相关资源
    最近更新 更多