一、运维相关
1、删除binlog日志
二、 索引相关
2.1、索引创建
-
在区分度高的字段上创建索引;
索引区分度 = count(distint 记录) / count(记录)。 -
巧用组合索引实现** Index Condition Pushdown(ICP)索引下推**,避免回表。
-- 先对 name 匹配索引找到 主键,在回表根据主键 找到数据记录后 判断 sex 条件
select count(id) from test1 a where name like 'cookie%' and sex = 1
-- 创建联合索引:(name,sex),通过索引数据即可完成整个条件过滤,避免回表。
- 巧用组合索引优化排序。
-- 使用 user_id 索引匹配到数据后,回表找到所有数据 在排序
select user_id, order_time from order where user_id = 'cookie' order by order_time
-- 创建联合索引:(user_id, order_time),通过user_id检索的数据已按order_time升序,将结果翻转即可得到降序。
- 联合索引注意最左匹配原则:按照从左到右的顺序匹配,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配。
比如 a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d 用不到索引,如果建立(a,b,d,c)在都可以使用索引,a,b,d 的顺序可任意调整。
2.2、索引使用
-
使用between、>、<等区间查询,若范围太大,跨度page过多,速度也会较慢;
-
in 检索字段使用索引不一定比关联慢;
-
当多个条件中有索引的时候,并且关系是and的时候,会走索引区分度高的;
-
谨慎使用*,最小查询。尽量去利用索引覆盖,可以减少 回表 操作 。;
-
查询数据都在索引树中时,出现索引覆盖,避免回表;
2.3、索引失效
-
对于 '%cookie'、'_cookie' 类型的模糊查询,索引失效;
-
索引字段为字符串,条件值为数字(如:name=1),索引失效;
-
索引字段使用了函数(如:concat(a.name,'1') ='cookie1'),索引失效;
-
索引字段使用了运算符(如: id + 1 < 2),索引失效;