是否有可能在以下查询中创建索引以方便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)。
非常感谢(我正在使用我从其他开发人员那里继承的代码......)
答案 0 :(得分:1)
在这个特定示例中,看起来可以将查询重写为:
SELECT a, b, c, d, e
FROM myTable
ORDER BY published DESC, rank, title
特别是,这不适用于任意转换函数,但可以在此示例中使用。
答案 1 :(得分:0)
在MySQL中没有可以帮助此查询的索引。
您可以做的一件事是向表中添加PublishedFlag
。但是,这需要触发update
和inset
。但是,然后这个查询:
SELECT a, b, c, d, e
FROM myTable
ORDER BY PublsihedFlag, rank, title
可以利用mytable(PublsihedFlag, rank, title)
上的索引。