如何使用“order by if”为查询索引表?

时间:2015-08-17 02:09:47

标签: mysql indexing sql-order-by

是否有可能在以下查询中创建索引以方便ORDER BY,如下所示?:

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

非常感谢(我正在使用我从其他开发人员那里继承的代码......)

2 个答案:

答案 0 :(得分:1)

在这个特定示例中,看起来可以将查询重写为:

SELECT a, b, c, d, e 
FROM myTable 
ORDER BY published DESC, rank, title

特别是,这不适用于任意转换函数,但可以在此示例中使用。

答案 1 :(得分:0)

在MySQL中没有可以帮助此查询的索引。

您可以做的一件事是向表中添加PublishedFlag。但是,这需要触发updateinset。但是,然后这个查询:

SELECT a, b, c, d, e 
FROM myTable 
ORDER BY PublsihedFlag, rank, title

可以利用mytable(PublsihedFlag, rank, title)上的索引。