索引相关:
- 索引基数表示不同数值的个数,除以全表行的数量可以代表散列程度,约大扫描的定位的效率越高。
- 索引失效的原因
运算±*/ ! <> %. 模糊查询like开头“%,
where.中类型错误
函数的话需要建立函数索引,mysql8才开始支持.
如果有or,除非or的都有索引,否则失效
字符串如果没“,失效
组合索引最左匹配 - 逻辑唯一最好建唯一索引。
EXPLAIN提示优化
- 覆盖索引:需要数据都能查到,不用回表查聚簇索引 。很多情况可能走非聚簇索引查询非索引字段再去聚簇索引查询的IO开销比全表还大。extra 列显示using index
- ICP特性: where条件中能使用索引字段会放到引擎层。
- 索引合并:多个索引查询结果合并。or 和 union可能用.
几个列表示的含义分析。
几种SQL技巧:
- 如果uk冲突不写入 :insert ignore into
- 如果uk就更新,否则插入.insert into … on duplicate key update. Col. = “”, 小心确认这个框架这个返回值仍然是否最新id
- 备份表 Crete table user SELECT * FROM user
- 复制表 create table user2 like user
- 共享锁 select * from user WHERE id=1 LOCK IN SHARE MODE
- 排他锁 SELECT * FROM user WHERE id=1 FOR UPDATE
- 强制走某个索引 SELECT * FROM user FORCE INDEX(idx)
- 强制禁用索引 SELECT * FROM user IGNORE INDEX(idx)
- 禁用缓存 SELECT SQL_NO_CACHE FROM user;
注意:
- 条件放where比having好
- truncate会把id自增给清掉
- SUM的列全是null,返回的也是
查询进程并杀死:
SHOW PROCESSLIST;
kill 10000