首页 存档 技术 查看内容

MySQL查询性能优化 MySQL查询性能优化

2018-3-30 13:00 |来自: 互联网 271 0

摘要: MySQL查询性能优化   MySQL查询性能的优化涉及多个方面,其中包括库表结构、建立合理的索引、设计合理的查询。库表结构包括如何设计表之间的关联、表字段的数据类型等。这需要依据具体的场景进行设计。如下我们从 ...

MySQL查询性能优化

  MySQL查询性能的优化涉及多个方面,其中包括库表结构、建立合理的索引、设计合理的查询。库表结构包括如何设计表之间的关联、表字段的数据类型等。这需要依据具体的场景进行设计。如下我们从数据库的索引和查询语句的设计两个角度介绍如何提高MySQL查询性能。

数据库索引

  索引是存储引擎中用于快速找到记录的一种数据结构。索引有多种分类方式,按照存储方式可以分为:聚簇索引和非聚簇索引;按照数据的唯一性可以分为:唯一索引和非唯一索引;按照列个数可以分为:单列索引和多列索引等。索引也有多种类型:B-Tree索引、Hash索引、空间数据索引(R-Tree)、全文索引等。

  • B-Tree索引

  在利用B-Tree索引进行查询的过程中,有几点注意事项,我们以表A进行说明。其中表A的定义如下:

  create table A(id int auto_increment primary key, name varchar(10), age tinyint, ** enum('男','女'), birth datatime, key(name,age,**));id为主键,并在name,age,**列上建立了索引。

  1. 全值匹配:指和索引中的所有列进行匹配,例如查找name='Jone' and age=13 and **='男'的人;

  2. 匹配最左前缀:指用索引的第一列name,如where name='Jone',该查询只使用了索引的第一列

  3. 匹配列前缀:匹配索引列值的开头,如where name like 'J%',查找名字以J开头的人;

  4. 匹配范围值:例如查找年龄在10-30之间的Jone,where name='Jone' and age between 10 and 30;

  5. 只访问索引的查询:如果在select中选择的字段都是索引中的字段,那么就不需要访问数据行,从而提高查询速度。

  6. 如果不是按照索引的最左列进行查找,则无法使用索引,如当仅查找表A中年龄为15岁的人时则无法使用索引;

  7. 不能跳过索引中的列,如查找表A中名字为Jone且为男性的人,则索引只能使用name列,无法使用**列;

  8. 查询中索引的某列是范围查询,则该列后的查询条件将不能使用索引。

Hash索引与B-Tree的区别:

  1. Hash索引指包含哈希值(根据key中的列计算)和行指针,而B-Tree存储的是列值。所以Hash不能使用索引来避免读取数据行;

  2. Hash索引数据不是按照索引值顺序存储的,所以无法用于排序;

  3. Hash索引不支持部分索引列匹配查找,因为Hash值是根据索引中的全部列计算出来的;

  4. Hash索引只支持等值比较查询,包括=、in()、

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部