首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为带有"order by if“的查询建立表索引?

如何为带有"order by if“的查询建立表索引?
EN

Stack Overflow用户
提问于 2015-08-17 10:09:47
回答 2查看 26关注 0票数 0

是否可以创建索引来简化以下查询中的ORDER BY,其中存在IF条件,如下所示:

代码语言:javascript
运行
复制
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)。

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

EN

回答 2

Stack Overflow用户

发布于 2015-08-17 10:43:32

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

代码语言:javascript
运行
复制
SELECT a, b, c, d, e 
FROM myTable 
ORDER BY published DESC, rank, title

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

票数 1
EN

Stack Overflow用户

发布于 2015-08-17 10:12:33

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

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

代码语言:javascript
运行
复制
SELECT a, b, c, d, e 
FROM myTable 
ORDER BY PublsihedFlag, rank, title

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32041851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档