SQL性能优化的几个小技巧,果断收藏

1、先了解MySQL的执行过程

了解了MySQL的执行过程,我们才知道如何进行sql优化。

客户端发送一条查询语句到服务器;服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据;未命中缓存后,MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树,MySQL解析器将使用MySQL语法进行验证和解析。例如,验证是否使用了错误的关键字,或者关键字的使用是否正确;预处理是根据一些MySQL规则检查解析树是否合理,比如检查表和列是否存在,还会解析名字和别名,然后预处理器会验证权限;根据执行计划查询执行引擎,调用API接口调用存储引擎来查询数据;将结果返回客户端,并进行缓存;2、数据库常见规范所有数据库对象名称必须使用小写字母并用下划线分割;所有数据库对象名称禁止使用mysql保留关键字;数据库对象的命名要能做到见名识意,并且最后不要超过2个字符;临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀;所有存储相同数据的列名和列类型必须一致;、所有表必须使用Innodb存储引擎

没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)。

Innodb支持事务,支持行级锁,更好的恢复性,高并发下性能更好。

4、每个Innodb表必须有个主键

Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。

Innodb是按照主键索引的顺序来组织表的

不要使用更新频繁的列作为主键,不适用多列主键;不要使用UUID、MD5、HASH、字符串列作为主键(无法保证数据的顺序增长);主键建议使用自增ID值;5、数据库和表的字符集统一使用UTF8

兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效,如果数据库中有存储emoji表情的需要,字符集需要采用utf8mb4字符集。

6、查询SQL尽量不要使用select*,而是具体字段

select*的弊端:

增加很多不必要的消耗,比如CPU、IO、内存、网络带宽;增加了使用覆盖索引的可能性;增加了回表的可能性;当表结构发生变化时,前端也需要更改;查询效率低;

的弊端:




转载请注明:http://www.aierlanlan.com/rzdk/6927.html