Mysql性能优化

一、设计

二、索引

1、B+树索引

2、哈希索引

三、查询语句

四、分区表

一、设计

1、表引擎尽量使用InnoDB,除非有其它特定功能需求才使用其它表引擎。 2、字段数据类型,MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。更小的通常更好,例如varchar(5)和varchar(100)都能满足,那么坚决使用更小的那个;数字要用数字类型,尽量不要用字符串;有时候可以使用枚举列代替常用的字符串类型。 3、列与表关联,表设计中不要有太多的列,表关联数量最好不要超过3个。 4、范式和反范式,表设计不一定完全遵守三大范式,有时候需要反范式,例如有时需要添加冗余字段简化业务与查询。 5、缓存表和汇总表,如果在数据库层面优化比较麻烦,可以考虑在业务层面优化,考虑加入缓存表与汇总表,特别是一些统计功能,有时候这样能简化业务,效率更高。

二、索引

当表中的数据量越来越大时,就要考虑建索引了,索引优化应该是对查询性能优化最有效的手段了。Mysql中,最常见的有B+树索引和哈希索引。

1、B+树索引

InnoDB表引擎默认使用B+树索引,B+树索引适合范围:精确查找、范围查找、前缀查找。 精确查找就是值等于(=)的查找;范围查找是<、<=、>、>=查找;前缀查找是以字符开头的查找。

单列索引 只有一个字段的索引。

联合索引 包含多个字段的索引,联合索引遵循最左侧原则,意思是where 后面带的条件字段要有最左边的字段,否则不走索引,例如:a,b,c三个字段组成的索引,where 条件后面要包含a字段。

索引操作

创建索引: alter table tb_name add index 索引名称 (列名);

删除索引: alter table tb_name drop index 索引名称;

查看索引: show index from tb_name;

查看sql语句执行计划 sql 执行语句前面加上explain关键字就可以查看执行计划,这样就能判断sql 语句走没走索引。

要注意不走索引的情况 现有一张预警日志表,建立一个包含三个字段的联合索引,最左侧是create_time字段。

1、不遵循最左侧原则。

2、模糊查找不走索引,像 where grade like ‘%1208%’,但 grade like '1208%'这样以字符串开头却会走索引。

3、索引列参与计算,不走索引

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。