PHP MYSQL数据库执行效率的问题
SELECT*FROMcontswherecid=$cidORDERBYrand()LIMIT10从数据库中随机提取10条信息数据少时没注意但是当有几十万条时,速度就会很...
SELECT * FROM conts where cid=$cid ORDER BY rand() LIMIT 10
从数据库中随机提取 10条信息
数据少时没注意
但是当有几十万条时,速度就会很慢
这是PHP的自身的原因,还是我写的有问题?
看不明白啊
能不能按我的语句具体写下? 谢谢
SELECT * FROM conts where cid=$cid ORDER BY rand() LIMIT 10 展开
从数据库中随机提取 10条信息
数据少时没注意
但是当有几十万条时,速度就会很慢
这是PHP的自身的原因,还是我写的有问题?
看不明白啊
能不能按我的语句具体写下? 谢谢
SELECT * FROM conts where cid=$cid ORDER BY rand() LIMIT 10 展开
3个回答
展开全部
Mysql语句优化是一个学问
大家都知道,大量数据的order by rand()效率是非常底的。
而且你还select * from xxx ,rand()不好优化,建议不用。
替代方法:
个人建议,先查询总数,然后使用函数,随机取出10个数,
然后SELECT * FROM conts where cid=$cid and xxxx in (你取出的10个数);
此外要设置好合理的索引,有利mysql检索速度
大家都知道,大量数据的order by rand()效率是非常底的。
而且你还select * from xxx ,rand()不好优化,建议不用。
替代方法:
个人建议,先查询总数,然后使用函数,随机取出10个数,
然后SELECT * FROM conts where cid=$cid and xxxx in (你取出的10个数);
此外要设置好合理的索引,有利mysql检索速度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ORDER BY rand() 的问题,数据少的话性能没问题,上30万的大表就不行了。
一般是按照表的主键,min和max,从中间随机10个,然后通过id匹配。
RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))
+(SELECT MIN(id) FROM `table`))
选出10个随机id
一般是按照表的主键,min和max,从中间随机10个,然后通过id匹配。
RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))
+(SELECT MIN(id) FROM `table`))
选出10个随机id
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设置主键,慢是因为影响的行数大。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询