mysql调优基础
一、mysql基础层次
词法分析:将字符串拆分,识别字符串中的表名,条件符等
语法分析:语法是否符合sql语法
注意:在sql语句中尽量避免出现select *
因为sql语句查询出的所有数据都是从磁盘读出来的,要尽量避免磁盘io
二、mysql调优分析
1、设置参数:set profiling = 1;
2、查看sql语句执行时间:show profile;
注意:当执行多条sql语句后,执行show profile会展示最近执行sql的时间分析
当执行多条sql语句,可以使用show profiles查看执行过的sql使用时间
可以使用show profile for query 数字(show profiles中的query_id)进行选择查看
三、schema与数据类型优化
1、根据实际场景选择更小的数据类型作为字段类型。
相同字段例如id,选择int与bigint所占用的磁盘空间是不同的,bigint占用空间更小。这时要尽量选择更小的数据类型
2、尽量避免使用与实际场景不符合的字段类型,数字就用int、字符串就用varchar、日期就用date。
相同数据情况下查询日期为date和日期为varchar,结果显示为date消耗时间更少
3、尽量避免null,在数据库中null != null,null会影响索引的优化
4、整型:tinyint、smallint、mediumint、int、bigint分别使用8,16,24,32,64进行存储
5、char和varchar选择varchar,varchar是根据存储数据大小动态改变的
char最大长度255,会自动删除末尾的空格
6、主键推荐使用与业务无关的代理主键,如自增的id或者uuid
7、字符集的选择,在mysql中一般选用utf8-mb4
utf8只支持每个字符3个字节,而utf8mb4是真正的UTF-8是每个字符4个字节
8、myisam与innodb的区别
innodb存储引擎默认情况是给索引进行加锁的,如果条件列是建索引的列就是使用行锁,否则就是使用表锁
作者:http://cnblogs.com/lyc-code/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权力。