深入浅出MySQL读书笔记3

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dote2r/article/details/82597386

18.2索引问题

18.2.1索引的存储分类

MySQL目前不支持函数索引,但是能对列的前面某一部分进行索引,例如标题title字段,可以只取title的前10个字符进行索引,这个特性可以大大缩小索引文件的大小,但前缀索引也有缺点,在排序Order By和分组Group By操作的时候无法使用。

create index idx_title on film(title(10));

InnoDB不支持Hash索引,Hash索引相对简单,只有Memory/Heap引擎支持Hash索引。Hash索引适用于Key-Value查询,通过Hash索引要比B-tree索引查询更迅速;Hash索引不适用范围查询,例如<、>这类操作。

18.2.2MySQL如何使用索引

可以利用B-tree索引进行关键字、关键字范围和关键字前缀查询。

alter table rental index rental_date;
alter table rental add index idx_rental_date(rental_date,inventory_id,customer_id);

1、MySQL中能够使用索引的典型场景

--匹配全值,如rental_date + inventory_id + customer_id
explain select * from rental where rental_date = '2005-05-25 17:22:10' and inventory_id = 373 and customer_id = 343 \G

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: rental
   partitions: NULL
         type: const
possible_keys: idx_fk_inventory_id,idx_fk_customer_id,idx_rental_date
          key: idx_rental_date优化器选择索引idx_rental_date进行扫描
      key_len: 10
          ref: const,const,const
         rows: 1
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)

匹配值的范围查找,对索引的值能够进行范围查找。

匹配最左前缀,如col1+col2+col3,能够使用:

  • col1

  • col1 + col2

  • col1 + col2 + col3

  • col1 + col3

不能使用:

  • col2
  • col2 + col3

仅仅对索引进行查询,当查询的列都在索引的字段中时,查询的效率更高。

匹配列前缀,仅仅使用索引中的第一列,并且只包含索引第一列的开头一部分进行查找。

能够实现索引匹配部分精确而其他部分进行范围查找。

如果列名是索引,那么使用column_name is null就会使用索引。

2、存在索引但不能使用索引的典型场景

以%开头的LIKE查询不能利用B-tree索引;

数据类型出现隐式转换的时候也不会用到索引,特别是当列类型是字符串,那么一定记得在where条件中把字符串常量值使用引号引起来;

复合索引的情况下,加入查询条件不包含索引列最左部分,即不满足最左原则;

如果MySQL估计使用索引比全表扫描更慢,则不使用索引;

用or分隔开的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么涉及到的索引都不会被用到;

第19章    优化数据库对象

19.1    优化表的数据类型

19.2    通过拆分提高表的访问效率

19.3    逆规范化

19.4    使用中间表提高统计查询速度

如数据中心的数据用定时任务执行好存到另一张表中专门用来查询

21    优化MySQLServer调整参数

23    应用优化

23.1    使用连接池

23.2    减少对MySQL的访问

23.2.1  避免对同一数据做重复检索

23.2.2  使用查询缓存

23.2.3  增加cache层

23.3  负载均衡

23.3.1  主从复制

23.3.2  采用分布式数据库架构

 

猜你喜欢

转载自blog.csdn.net/Dote2r/article/details/82597386