Mysql查询性能优化要从有二个方面,库表结构优化和查询优化。
一、 库表结构优化
1. 选择优化的数据类型
应该尽量选择正确数据类型的最小数据类型,更小数据类型通常更快,因为它们占用更少的磁盘、内存和cpu缓存。
1) 整数类型
Mysql中的整数类型包括tinyint、smallint、mediumint、int、bigint,分别使用8、16、24、32和64位空间存储
2) 实数类型
实数就是带有小数点的数据类型,mysql中的实数类型包括:float、double和decimal。其中,float和double属于浮点类型,是常见的数据类型,存储空间分别占用4和8个字节。
3) 字符串类型
Mysql中字符串类型包括varchar和char,分别用于存储可变长字符和固定长度字符。
4) Blob和text类型
Blob与text是用来存储大数据的数据类型,分别采用二进制和字符方式存储,与oracle中blob与clob(clob也是二进制存储,不是字符方式)类似
5) 日期和时间类型
Mysql中包含datetime和timestamp两种存储日期和时间的类型。Datetime可以存储大范围的值,从1001到9999年,精确到秒,与时区无关,使用8个字节存储空间,显示格式为“2018-02-27 10:44:22”。
二、 查询优化
1) 优化count()查询
Count()函数是用来统计记录行数或某列值的数量,只统计不为null的值,
在没有任何where条件的count()函数,查询速率非常快,因为mysql此时无需计算实际的行数,而是利用存储引擎的特性直接获取这个值。
2) 优化关联查询
当使用关联查询时,确保on或using子句中的列上有索引。确保group by和order by表达式只涉及到一个表中的列,这样才能使用索引来优化这个过程。
3) 优化子查询
优化子查询最重要的建议是尽可能的使用关联查询。
4) 优化group by和distinct
Mysql内部优化器会相互转化这两种查询,它们都可以使用索引来来优化,而且索引优化是最优效的方式。
5) 优化limit分页
Mysql中使用limit m,n函数分页,其中m代表位置偏移量,n代表获取的行数。在使用limit分页时,通常加上order by子句。
Limit的分页效率问题,主要就是位置偏移量的问题,当位置偏移量很大时,mysql需要扫描大量的行并抛弃掉。
0条评论