mysql优化 索引优化和查询优化

本文详细探讨了数据库调优的多个关键方面,包括索引失效的原因和解决方案,如遵循最左前缀原则,避免计算和函数导致的失效。还介绍了JOIN语句的性能优化,强调小表作为驱动表的重要性。排序优化中,指出应尽量使用索引来避免全表扫描和FileSort。最后,提出了统一数据库和表的字符集以避免乱码和提高效率的建议。
摘要由CSDN通过智能技术生成

从哪些维度进行数据库调优

1.索引失效 没有充分利用索引

2.关联太多join (sql优化)

3.服务器调优和各个参数(缓存。线程池)

4.数据过多 --分库分表

sql优化分为物理查询优化和逻辑查询优化 屋里查询优化据说通过索引和表连接等方式进行优化

逻辑查询优化就是通过sql等价变换提升查询效率

1.索引失效

1.主键插入顺序

最好让插入的记录的 主键值依次递增 ,这样就不会发生这样的性能损耗了。
建议:让主键具有 AUTO_INCREMENT ,让存储引擎自己为表生成主键,而不是我们手动插入 
2.最左前缀原则
索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

3.计算、函数、类型转换(自动或手动)导致索引失效

4.类型转换导致索引失效

5.范围条件右边的列索引失效

6.不等于(!= 或者<>)索引失效

7.is null可以使用索引,is not null无法使用索引

8. like以通配符%开头索引失效

9.OR 前后存在非索引的列,索引失效

10.数据库和表的字符集统一使用utf8mb4

统一使用utf8mb4( 5.5.3版本以上支持)兼容性更好,统一字符集可以避免由于字符集转换产生的乱码。不同的 字符集 进行比较前需要进行 转换 会造成索引失效

join语句原理

1. 使用 join 语句,性能比强行拆成多个单表执行 SQL 语句的性能要好;
2. 如果使用 join 语句的话,需要让小表做驱动表。

排序优化

1. SQL 中,可以在 WHERE 子句和 ORDER BY 子句中使用索引,目的是在 WHERE 子句中 避免全表扫 描 ,在 ORDER BY 子句 避免使用 FileSort 排序 。当然,某些情况下全表扫描,或者 FileSort 排
序不一定比索引慢。但总的来说,我们还是要避免,以提高查询效率。
2. 尽量使用 Index 完成 ORDER BY 排序。如果 WHERE 和 ORDER BY 后面是相同的列就使用单索引列;
如果不同就使用联合索引。
3. 无法使用 Index 时,需要对 FileSort 方式进行调优。

总结

1.保证被驱动表的JOIN字段已经创建了索引
2.需要JOIN 的字段,数据类型保持绝对一致。
3.LEFT JOIN 时,选择小表作为驱动表, 大表作为被驱动表 。减少外层循环的次数。
4.INNER JOIN 时,MySQL会自动将 小结果集的表选为驱动表 。选择相信MySQL优化策略。
5.能够直接多表关联的尽量直接关联,不用子查询。(减少查询的趟数)
6.不建议使用子查询,建议将子查询SQL拆开结合程序多次查询,或使用 JOIN 来代替子查询。
7.衍生表建不了索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值