mysql 优化总结记录

  1. 要加orderby 数据库默认不是主键顺序,或许和数据库存储引擎与查询字段(索引)有关系。

  2. 数据重复多的字段建索引,反而会慢(索引过多,索引查询也需要时间)。

  3. like 左模糊 %关键词,(百万数据结果集)mysql暂时没有解决方案(或许设置全文索引可以),右模糊 关键词% 建立索引。

  4. 分页 如果主键顺序没有被破坏掉, 用BETWEEN;能用between就少用in(确定范围比in这种不确定范围的效率高) 例:

    select * from table where vid BETWEEN 1000000 and 1000010 order by vid asc;
    
  5. 因索引过多导致查询慢的,可利用子查询获得主键,再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;
    
  6. 尽可能大的减少查询所获取的结果集范围,避免全文检索,所以where要多用。

  7. 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
    
  8. where条件遵循最左原则,先用索引找出集合再排除其他没索引的集合;复合索引必须严格按照前后索引顺序,不然索引不会命中。

持续更新。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章