我有一张约有900k记录的表格
votes
是INT字段,其数字介于NULL-500k之间
rating
是0.0到10.0之间的十进制
这些查询大约需要3秒
select * from movie where genre = 'action' order by rating asc limit 0,2000;
select * from movie where genre = 'action' order by votes asc limit 0,2000;
这个永远不会完成
select * from movie where genre ='action' order by votes desc limit 0,2000;
我尝试在投票上添加索引并没有区别
我很困惑为什么在排序int字段时遇到这么多问题。有什么想法吗?
答案 0 :(得分:0)
在此表上创建两个复合索引,以查看是否可以提高性能。一个应该在(genre, rating)
上,而另一个应该在(genre, votes)
上。这些复合索引将有助于有效处理您显示的查询的WHERE
和ORDER BY
子句。
尝试此查询以查看事情是否变得更快:
select *
from movie
where genre='action'
and votes is not null
order by votes desc
limit 2000
这将消除您的NULL投票,这可能会使您的查询混淆。
不要使用select *
;如果只获取所需的列,则可能会获得更快的结果。
重新定义votes
列,使其为NOT NULL
,并将默认值设为零。在WHERE
和ORDER BY
子句中,NULL值无效。