建立索引的几大原则

  • 最左匹配原则,MySQL会一直匹配直到遇到范围查询(>、<、between、like)就停止匹配。
  • =in可以乱序,MySQL的查询优化器会优化成索引可以识别的格式。
  • 尽量使用区别度高的列作索引,状态、性别这种不适合做索引。区别度的公式为count(distinct col)/count(*),需要join的字段要求0.1以上。
  • 索引列尽量不参与计算
  • 尽量扩展现有的索引,不要新建索引。

limit分页查询

分页查询如果需要查询的数据量比较大,那么limit查询的偏移量就可能会很大,造成查询速度显著降低。可以用子查询的方法来解决

SELECT * FROM `posts` ORDER BY pid LIMIT 100000, 30
SELECT * FROM `posts` WHERE PID > (
  SELECT pid FROM `posts` ORDER BY pid LIMIT 100000, 1
) LIMIT 30