首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-08-16 
这条语句可以优化吗?量大的话很慢。。SELECT prr.*,r.r_icon,r.r_desc,r.r_name,r.r_uri,r.r_thumbnail FROM

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


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 * ... ,应把需要返回的字段列出来为好.

热点排行