MySQL优化之对RAND()的优化方法
众所周知,在MySQL中,如果直接ORDERBYRAND()的话,效率非常差,因为会多次执行。事实上,如果等值查询也是用RAND()的话也如此,我们先来看看下面这几个SQL的不同执行计划和执行耗时。
首先,看下建表DDL,这是一个没有显式自增主键的InnoDB表:
[yejr@imysql]>showcreatetablet_innodb_random\G ***************************1.row*************************** Table:t_innodb_random CreateTable:CREATETABLE`t_innodb_random`( `id`int(10)unsignedNOTNULL, `user`varchar(64)NOTNULLDEFAULT'', KEY`idx_id`(`id`) )ENGINE=InnoDBDEFAULTCHARSET=latin1
往这个表里灌入一些测试数据,至少10万以上,id字段也是乱序的。
[yejr@imysql]>selectcount(*)fromt_innodb_random\G ***************************1.row*************************** count(*):393216
1、常量等值检索:
[yejr@imysql]>explainselectidfromt_innodb_randomwhereid=13412\G ***************************1.row*************************** id:1 select_type:SIMPLE table:t_innodb_random type:ref possible_keys:idx_id key:idx_id key_len:4 ref:const rows:1 Extra:Usingindex
[yejr@imysql]>selectidfromt_innodb_randomwhereid=13412; 1rowinset(0.00sec)
热门推荐
10 圣诞祝福语简短小学
11 祖国七十华诞简短祝福语
12 老师送的祝福语简短
13 生日祝福语大全女生简短
14 祝女性生日祝福语简短
15 牛年女神节祝福语简短
16 情人表白祝福语简短大气
17 老公开业祝福语简短
18 官宣新年祝福语简短