2012-06-01 278 views
1

我的表tbltemp有大约9万记录。这些列是:id(主键,自动增量),name,qty, price, status,mod_date,created_dateMysql查询时间长

我的查询是:

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

大约需要7到10秒来执行。我怎样才能优化我的表或查询?

+1

可能重复[如何优化MySQL的ORDER BY RAND()函数?](http://stackoverflow.com/questions/1244555/how-can-i-optimize-mysqls-order-by-rand功能) – Interrobang

+0

为什么你必须在这里执行'ORDER By Rand()'? – Rahul

+0

query' select * from tbltemp where qty> 3 ORDER By id Limit 50'需要多长时间? – Rahul

回答

0

您应该在qty列上创建广告索引。
无论如何ORDER By Rand()是耗时的...

+0

这将是一个可选的好东西,但根本不需要。我相信,如果他运行查询'select * from tbltemp where qty> 3 ORDER By id Limit 50' ...将会更快。 – Rahul

+0

我想显示随机列表,当每次用户刷新我的页面..这就是为什么我在查询@Rahul –

+0

@FloraClinton使用“ORDER BY RAND()”,我已经发布了一个答案。看,如果这有效。 – Rahul

0

这是order by rand()的替代品。试试这个一次,看看它是否

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

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

EXECUTE mystatement USING @lims; 
0

在您的查询:

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

查询优化请看看:

  1. ORDER BY子句是采取长期的主要原因时间。
  2. 将索引添加到qty列。
  3. 另外你使用的存储引擎也会影响查询的性能 优化.MISISAM是最快的存储引擎。