Mysql查询花费了很长时间

Mysql查询花费了很长时间,mysql,optimization,Mysql,Optimization,我的表tbltemp有大约90万条记录。列为:id(主键,自动递增),名称,数量,价格,状态,修改日期,创建日期 我的问题是: SELECT * FROM tbltemp WHERE qty > 3 ORDER By Rand() LIMIT 50 执行大约需要7到10秒。如何优化我的表或查询?您应该在数量列上创建广告索引。 无论如何,orderbyrand()非常耗时……这里有一个orderbyrand()的替代方案。试试这个,看看是否有效 select @lims :

我的表
tbltemp
有大约90万条记录。列为:
id
(主键,自动递增),
名称
数量
价格
状态
修改日期
创建日期

我的问题是:

SELECT * 
 FROM tbltemp 
 WHERE qty > 3 
 ORDER By Rand() 
 LIMIT 50

执行大约需要7到10秒。如何优化我的表或查询?

您应该在
数量
列上创建广告索引。

无论如何,
orderbyrand()
非常耗时……

这里有一个
orderbyrand()
的替代方案。试试这个,看看是否有效

select @lims := floor(1+rand()*(count(*) - 1)) from tbltemp;  

PREPARE mystatement FROM "SELECT * FROM tbltemp WHERE qty > 3 LIMIT ?, 50";

EXECUTE mystatement USING @lims;
在您的查询中:

SELECT * FROM tbltemp WHERE qty > 3 ORDER By Rand() LIMIT 50
有关查询优化,请查看:

  • 按条款订购是花费很长时间的主要原因
  • 数量
    列中添加索引
  • 此外,您正在使用的存储引擎也会影响性能 MYISAM是最快的存储引擎

  • 可能重复您为什么必须在此处执行
    ORDER By Rand()
    ?查询
    从tbltemp中选择*多长时间,其中数量>3按id订购限制50
    需要?@Interrobang不完全-其他问题限制结果为一行,而此处有多行。这里发现的解决方案不适用。您可以查看一下。这是一个可选的好东西,但根本不需要。我确信如果他运行查询
    select*from tbltemp,其中数量>3按id订购限制50
    。。。会快得多。我想在每次用户刷新我的页面时显示随机列表。这就是为什么我在query@Rahul中使用“ORDER BY RAND()”