众所周知,在MySQL中,如果直接 ORDER BY RAND() 的话,效率非常差,因为会多次执行。事实上,如果等值查询也是用 RAND() 的话也如此,我们先来看看下面这几个SQL的不同执行计划和执行耗时。
首先,看下建表DDL,这是一个没有显式自增主键的InnoDB表:
往这个表里灌入一些测试数据,至少10万以上, id 字段也是乱序的。
1、常量等值检索:
[yejr@imysql]> select id from t_innodb_random where id = 13412;
1 row in set (0.00 sec)