php – 由rand()查询命令太慢了
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 由rand()查询命令太慢了,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1140字,纯文字阅读大概需要2分钟。
内容图文
![php – 由rand()查询命令太慢了](/upload/InfoBanner/zyjiaocheng/795/4a38192bc65145b2a498cf89db7fe891.jpg)
我在一个名为offer(超过300.000行)的数据库中有一个大表.
当我执行以下查询时,它需要超过3秒.
$sql = "SELECT * FROM `offers` WHERE (`start_price` / `price` >= 2) ORDER BY RAND() LIMIT 1";
表格提供
`id` int(11) NOT NULL,
`title` text NOT NULL,
`description` text NOT NULL,
`image` text NOT NULL,
`price` float NOT NULL,
`start_price` float NOT NULL,
`brand` text NOT NULL
有没有办法让它更快?我想选择一个随机行(start_price / price> = 2)
解决方法:
我认为您的问题是您的查询需要对WHERE子句进行全表扫描.顺序确实会使事情变得更糟 – 取决于通过过滤器的音量.
您可以考虑将此数字存储在表中并为其添加索引:
alter table offers add column start_to_price float;
update offers
set start_to_price = start_price / price;
create index idx_offers_s2p on offers(start_to_price);
然后,您的查询可能很快:
SELECT o.*
FROM `offers` o
WHERE start_to_price >= 2
ORDER BY RAND()
LIMIT 1;
如果性能仍然是一个问题,那么我可能会首先使用where子句:
SELECT o.*
FROM `offers` o CROSS JOIN
(select COUNT(*) as cnt from offers where start_to_price >= 2) oo
WHERE rand() <= 10 / cnt
ORDER BY RAND()
LIMIT 1;
这随机抽取大约10行,然后选择其中一行.
如果这些不起作用,那么还有其他解决方案逐渐变得更加复杂.
内容总结
以上是互联网集市为您收集整理的php – 由rand()查询命令太慢了全部内容,希望文章能够帮你解决php – 由rand()查询命令太慢了所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。