不使用ORDER BY RAND()
1 |
select id from `dynamic` order by rand() limit 1000; |
上面的SQL语句,可优化为:
1 |
select id from `dynamic` t1 join (select rand() * (select max(id) from `dynamic`) as nid) t2 on t1.id > t2.nidlimit 1000; |
区分in和exists、not in和not exists
原SQL语句:
1 |
select * from 表A where exists(select * from 表B where 表B.id=表A.id) |
高效的SQL语句:
1 |
select colname … from A表 Left join B表 on where a.id = b.id where b.id is null |