【MySQL】优化
【MySQL】优化
性能查看
1、解释SQL,explain
2、show profile
mysql 5.1以后版本引入的
开启 mysql> set profiling = 1; 给每一个查询生成一个整形的标识 mysql> show profiles; 查看查询具体耗时在哪里 mysql> show profile for query 1;
清空状态 flush status; 执行sql select * from admin_user; 查看状态值 show status where Variable_name like 'Handler%' or Variable_name like 'Created%';
3、显示全局状态,show global status
threads_connected, threads_running
4、show processlist
数据类型优化
1、更小的通常更好
选择不会超过范围的最小类型,小类型占用CPU内存磁盘都少。
2、简单就好
简单数据类型需要更少的CPU,比如整形比字符串代价底
3、尽量避免NULL字段
因为可为NULL的列使得索引、索引统计和值比较更为复杂,且会使用更多的存储空间。当可为NULL的列被索引时,每个索引记录需要一个额外的字节。
整数类型
字符串类型
1、VARCHAR(5)和VARCHAR(200)使用短的更有优势
当存储'hello'时磁盘开销是相同的,但加载到内存是不同的,更长的列会消耗更多的内存,因为MySQL会分配固定大小的内存块来保存内部值,尤其是使用内存临时表进行排序和操作时会特别糟糕
2、BLOB和TEXT排序
order by substring(column, length) 将列转换为字符串,这样可以使用内存临时表,但要确保截取的字符串足够短,不会时临时表的大小超过max_heap_table_size或tmp_table_size。
日期和时间类型
DATETIME: 1001~9999精度秒,使用8个字节存储
TIMESTAMP:从1970年01月01日开始的秒(格林尼治时间),使用4个字节存储,尽量使用因为比DATETIME空间效率更高
FROM_UNIXTIME()把unix时间戳转为日期,UNIX_TIMESTAMP()把日期转为unix时间戳
位数据类型
MYSQL把BIT当作字符串类型,而不是数字类型,应当慎用BIT类型,最好避免使用该类型
标识符选择
整数通常是标识列最好的选择