当前位置: 代码迷 >> Sql Server >> 这条话语可以优化吗?量大的话很慢。
  详细解决方案

这条话语可以优化吗?量大的话很慢。

热度:64   发布时间:2016-04-24 20:51:04.0
这条语句可以优化吗?量大的话很慢。。

SELECT prr.*,r.r_icon,r.r_desc,r.r_name,r.r_uri,r.r_thumbnail FROM `points_resource_relation` prr 
INNER JOIN resource r ON prr.r_id=r.r_id
WHERE  1=1   AND r.r_gender=1 ORDER BY RAND() LIMIT 1

从一条查询语句中随机选出一条数据,所以用了ORDER BY RAND() ,但是量大(10万)的话查询就很慢。大概1秒以上了。这个速度不能接受啊。。。

有没有办法优化或者换一种语句让他查询更快呢?

------解决方案--------------------
--因为要随机排序后,再取一条。所以10W记录每次都会随机排序,性能主要消耗在这儿
--变通一下。比如每条记录都有一主键。用随机算法算出主键的值(范围即可),再随机取一条
select top(1) from tb where id between @begin and @end. --先随机得到@begin和@end
------解决方案--------------------
select top(1) from tb where id between @begin and @end order by newid()
------解决方案--------------------
r_gender,r_id 这两个列做个组合的非聚集索引试试
------解决方案--------------------
Limit 1 典型的MYSQL语法
ORDER By RAND()随机取一条要改变方式,否则性能总是问题
------解决方案--------------------
避免用select * ... ,应把需要返回的字段列出来为好.
  相关解决方案