-
要加orderby 数据库默认不是主键顺序,或许和数据库存储引擎与查询字段(索引)有关系。
-
数据重复多的字段建索引,反而会慢(索引过多,索引查询也需要时间)。
-
like 左模糊 %关键词,(百万数据结果集)mysql暂时没有解决方案(或许设置全文索引可以),右模糊 关键词% 建立索引。
-
分页 如果主键顺序没有被破坏掉, 用BETWEEN;能用between就少用in(确定范围比in这种不确定范围的效率高) 例:
select * from table where vid BETWEEN 1000000 and 1000010 order by vid asc;
-
因索引过多导致查询慢的,可利用子查询获得主键,再join全部需要的字段。例:
select * from table v1 RIGHT JOIN (SELECT Vid FROM table WHERE Uid=0 ORDER BY Vid asc limit 600000,10) v2 ON v2.Vid=v1.Vid;
-
尽可能大的减少查询所获取的结果集范围,避免全文检索,所以where要多用。
-
or 尽量用union代替,or可能会导致放弃使用索引(现只在重复值较多的索引身上有优化现象)。例:
select id from t where num=10 union all select id from t where num=20;
代替
select id from t where num=10 or num=20
-
where条件遵循最左原则,先用索引找出集合再排除其他没索引的集合;复合索引必须严格按照前后索引顺序,不然索引不会命中。
持续更新。。。