简单的SQL语句花了太长时间

时间:2014-10-25 19:47:52

标签: mysql sql indexing sql-order-by

我有一张约有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字段时遇到这么多问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  • 在此表上创建两个复合索引,以查看是否可以提高性能。一个应该在(genre, rating)上,而另一个应该在(genre, votes)上。这些复合索引将有助于有效处理您显示的查询的WHEREORDER BY子句。

  • 尝试此查询以查看事情是否变得更快:

    select * from movie where genre='action' and votes is not null order by votes desc limit 2000

    这将消除您的NULL投票,这可能会使您的查询混淆。

  • 不要使用select *;如果只获取所需的列,则可能会获得更快的结果。

  • 重新定义votes列,使其为NOT NULL,并将默认值设为零。在WHEREORDER BY子句中,NULL值无效。