Junhc

岂止于博客

MySQL查询优化

MySQL查询过程

MySQL逻辑查询处理的步骤序号

MySQL查询优化
  1. inexists

    如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in
    反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists

  2. not innot exists

    如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引
    not extsts的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快

  3. 避免对索引字段进行计算操作、函数、类型转换

  4. 避免对索引字段上使用not<>!=is nullis not null

  5. 避免建立索引的列中使用空值

  6. where子句中避免使用<>!=innot inorhaving、计算操作、函数

    select id from t where num in(1,2,3) -> select id from t where num between 1 and 3
    select id from t where num/2=100 -> select id from t where num=100*2

  7. or改用union allunion,视情况判断是否需要去重

  8. 分页查询优化