我有这样的查询:
SELECT * FROM table WHERE premium = 3
我只是想知道如何让它返回结果的随机顺序!
我被告知不要使用ORDER BY RAND();
,因为它使用了大量的系统资源。
答案 0 :(得分:1)
您期待多少结果?如果它很小,为什么不抓住所有结果,然后从它们中选择随机索引?
答案 1 :(得分:1)
我从可伸缩性博客中读到Digg在PHP而不是Mysql中进行了4000%的排序改进。所以我的建议是用PHP而不是Mysql进行排序。我想你可以将结果放在一个shuffle的数组中。
实施评论功能时 增加4,000% 性能是通过排序创建的 PHP而不是MySQL
每次尝试使用例如APC(在快速内存中)缓存它们时,不是从数据库中获取结果,而是最小化数据库负载。 SELECT * FROM table WHERE premium = 3
更改后更新缓存。无论如何,对于任何大型站点来说APC都是必须的,因为编译PHP代码需要花费很多时间。
如果您无法编译APC,那么您的网站将永远不会尽可能快地运行。您可以将数据库提取存储在一个文件中,但是您必须执行可能会对您造成很大伤害的光盘IO。
如果你无法编译APC(说实话我会一直看看谷歌的应用程序引擎)那么我建议你看看谷歌的app engine,因为他们有memcached这是一个内存数据库(闪电般快速)。您甚至可以在app引擎上通过quercus运行PHP代码。谷歌有一个慷慨的免费配额,一旦你使用免费配额便宜。