MySQL随机查询记录的效率测试与分析
以下是文章的主要内容。1.select * `表` ORDER BY RAND()极限5
没关系
但这是一个真正的测试,发现效率非常低,超过1500万的图书馆,查询5件数据,甚至超过8秒。
请看官方手册,并说,兰德()是多次执行的顺序条款,自然效率和低。
不能以顺序的方式使用带有兰德()值的列。
搜索谷歌,互联网基本上是查询MAX(ID)* *(),以便随机访问数据。
1.select *
2.from `表` T1连接(选择圆(rand()*(选择最大值(ID)从))
3.where t1.id = t2.id
通过t1.id ASC限制5 4.order;
但是这将产生5个连续的记录。这个解决方案每次只有一个查询和5个查询。即使如此,它也是值得的,因为15万个表,查询只需要不到0.01秒。
以上语句用于连接,MySQL论坛使用MySQL。
1.select *
2.from `表`
3.where ID(选择地板> =(最大*兰德)(ID)(从)`表`)
通过ID限1 4.order;
我测试了它,它花了0.5秒,速度很好,但是与上面的语句有很大的差距。
所以我重写了语句。
1.select * `表`
2.where ID(选择地板=(RAND)*(选择(max(ID)从`表`)))
通过ID限1 3.order;
在这种情况下,效率提高了,查询时间仅为0.01秒。
最后,对句子进行了完善,并将min(id)添加到判断中,在测试开始时,我没有添加一个min(id)判断,结果是查询表中前几行的一半时间。
完整的查询语句是:
1.select * `表`
2.where ID(选择地板(兰德> =((*)(选择最大值(ID)从`表`(选择)- min(ID)从`表`)(选择)+ min(ID)从`表`)))
通过ID限1 3.order;
4.select *
5.from `表` T1连接(选择圆(RAND())*((选择最大值(ID)选择)(+)(max)(选择))+((x))
6.where t1.id = t2.id
通过t1.id限1 7.order;
最后,这两个语句分别在PHP中进行了10次查询。
前者需要0.147433秒。
后者需要0.015130秒。
似乎使用连接的语法比直接使用函数效率更高效,上面是使用兰德随机查询记录对MySQL进行效率测试的介绍,我希望您能得到一些东西。