Skip to content

Commit a7dc509

Browse files
authored
Update MySQL常见知识点总结.md
1 parent 0e24521 commit a7dc509

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

docs/MySQL常见知识点总结.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,9 @@ order by,group by或者关联查询是否使用了索引。
320320
**常见索引失效:**
321321
1 . 系统中经常出现的sql语句如下:
322322
EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30
323+
323324
EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 and deptid=4
325+
324326
EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 and deptid=4 AND emp.name = ‘abcd’
325327

326328
解决:
@@ -340,23 +342,36 @@ CREATE INDEX idx_age_deptid_name ON emp(age,deptid,NAME)
340342
7.字符串不加单引号索引失效,javabean类型和mysql字段的字符类型要一直,不然所以会失效。
341343

342344
**关联查询优化**
345+
343346
1、保证被驱动表的join字段已经被索引
347+
344348
2、left join 时,选择小表作为驱动表,大表作为被驱动表。
349+
345350
3、inner join 时,mysql会自己帮你把小结果集的表选为驱动表。
351+
346352
4、子查询尽量不要放在被驱动表,有可能使用不到索引。
353+
347354
5、能够直接多表关联的尽量直接关联,不用子查询。
355+
348356
子查询优化:
357+
349358
尽量不要使用not in 或者 not exists
359+
350360
用left outer join on xxx is null 替代
351361

352362
**排序分组优化**
353363

354364
普通order by不能使用索引
365+
355366
**无过滤 不索引**,可加上过滤条件,使用索引
367+
356368
**顺序错,必排序**排序的顺序要对应
369+
357370
**方向反 必排序** desc asc要一样
371+
358372
ORDER BY子句,尽量使用Index方式排序,避免使用FileSort方式排序
359373

374+
360375
group by 使用索引的原则几乎跟order by一致 ,唯一区别是groupby 即使没有过滤条件用到索引,也可以直接使用索引。
361376

362-
**最后使用索引的手段:覆盖索引 即不要使用select * **
377+
`最后使用索引的手段:覆盖索引 即不要使用select * `

0 commit comments

Comments
 (0)