MySQL常见优化手段

索引相关:

  1. 索引基数表示不同数值的个数,除以全表行的数量可以代表散列程度,约大扫描的定位的效率越高。
  2. 索引失效的原因
    运算±*/ ! <> %. 模糊查询like开头“%,
    where.中类型错误
    函数的话需要建立函数索引,mysql8才开始支持.
    如果有or,除非or的都有索引,否则失效
    字符串如果没“,失效
    组合索引最左匹配
  3. 逻辑唯一最好建唯一索引。

EXPLAIN提示优化

  1. 覆盖索引:需要数据都能查到,不用回表查聚簇索引 。很多情况可能走非聚簇索引查询非索引字段再去聚簇索引查询的IO开销比全表还大。extra 列显示using index
  2. ICP特性: where条件中能使用索引字段会放到引擎层。
  3. 索引合并:多个索引查询结果合并。or 和 union可能用.
    几个列表示的含义分析。

几种SQL技巧:

  1. 如果uk冲突不写入 :insert ignore into
  2. 如果uk就更新,否则插入.insert into … on duplicate key update. Col. = “”, 小心确认这个框架这个返回值仍然是否最新id
  3. 备份表 Crete table user SELECT * FROM user
  4. 复制表 create table user2 like user
  5. 共享锁 select * from user WHERE id=1 LOCK IN SHARE MODE
  6. 排他锁 SELECT * FROM user WHERE id=1 FOR UPDATE
  7. 强制走某个索引 SELECT * FROM user FORCE INDEX(idx)
  8. 强制禁用索引 SELECT * FROM user IGNORE INDEX(idx)
  9. 禁用缓存 SELECT SQL_NO_CACHE FROM user;

注意:

  1. 条件放where比having好
  2. truncate会把id自增给清掉
  3. SUM的列全是null,返回的也是

查询进程并杀死:

SHOW PROCESSLIST;
kill 10000

你可能感兴趣的:(MySQL常见优化手段)