是否可以创建索引来简化以下查询中的ORDER BY,其中存在IF条件,如下所示:
SELECT a, b, c, d, e
FROM myTable
ORDER BY IF(published, 0, 1), rank, title我尝试在myTable上创建索引(已发布,排名,标题),也尝试在myTable上创建索引(排名,标题),但使用EXPLAIN测试查询显示没有使用索引。
“发布”是一个tinyint,可以是0或1;"rank“也是一个tinyint,但可以是该范围内的任何值;"title”是varchar(255)。
非常感谢(我正在使用我从其他开发人员那里继承的代码……)
发布于 2015-08-17 10:43:32
在这个特定的示例中,查询看起来可以重写为:
SELECT a, b, c, d, e
FROM myTable
ORDER BY published DESC, rank, title特别是,这不适用于任意转换函数,但可以在本例中使用。
发布于 2015-08-17 10:12:33
在MySQL中没有可以帮助此查询的索引。
您可以做的一件事是向表中添加一个PublishedFlag。但是,这需要update和inset的触发器。但是,然后是这个查询:
SELECT a, b, c, d, e
FROM myTable
ORDER BY PublsihedFlag, rank, title可以利用mytable(PublsihedFlag, rank, title)上的索引。
https://stackoverflow.com/questions/32041851
复制相似问题