mysql数据库优化实践
参考链接文章:
https://yq.aliyun.com/articles/79665?spm=5176.100239.blogcont79666.14.z2X6Hg
一些命令和工具
explain/explain extended
Explain (显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句)
profile工具
Profile(查询到 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 Systemlock, Table lock 花多少时间等等.)
慢查询
它能记录下所有执行超过long_query_time时间的SQL语句, 帮你找到执行慢的SQL, 方便我们对这些SQL进行优化.
数据类型优化
选择数据类型的步骤:
Step1:确定合适的大类型,如数字、字符串、时间等;
Step2:选择具体类型,相同大类型的不同子类型数据的存储长度,范围,允许的精度不同,有时候也有一些特殊的行为和属性。
普遍适用的原则:
- 使用小而简单的合适的数据类型;
- 对于可变长字符串VARCHAR,只分配真正需要的空间;
- 小心使用ENUM;
- 尽量使用整型定义标识列;
- 使用相同数据类型存储相似或者相关的值,尤其是关联条件中使用的列。
核心原则:具体问题具体分析。一些特定的业务场景并不适合套用普遍使用的原则。
索引优化
- 写条件语句时,使用独立的列
- 当需要索引很长的字符列时
- 一种方案是哈希索引;
- 但有时候这样做还不够,还可以选择索引开始的部分字符。可以大大节约索引空间,提高索引效率,但索引选择性是不可忽略的一部分。
- 多列索引时,出现索引合并并不一定会使性能最优。
- 选择合适的索引列顺序,多数经验法则告诉我们将选择性最大的列放前边,但是有时需要考虑特殊情况,比如WHERE子句中的排序,分组和范围条件等因素
- 覆盖索引。
- 使用索引扫描来做排序。
- 冗余和重复索引。未使用的索引。
SQL优化
- 确认应用程序是否在检索大量超过需要的数据。
- 确认MYSQL服务器层是否在分析大量超过需要的数据行。