索引优化分析(一)

一、分析SQL语句查询慢、等待时间长的原因

(1)查询的sql语句写的烂

(2)索引失效(单值索引、复合索引)

(3)关联查询太多join(即关联了太多的表,设计缺陷或需求需要)

(4)服务器调优及各个参数设置(缓冲、线程数等)

二、常见通用的 join 查询

(1)Mysql执行sql语句顺序

SELECT                                            6
    *|{[DISTINCT] column|expression [alias],...}  7
FROM table1                                       1
inner join table2 on join_condition               2                      
[WHERE condition(s)]                              3
[GROUP BY column|group_by_expression]             4
[HAVING group_condition]                          5
[ORDER BY column1,column2... asc|desc]            8
limit start,size                                  10

(2)七种常见的join查询

索引优化分析(一)_第1张图片

三、索引的简介

1、什么是索引 

      Mysql官方定义索引为:索引是帮助mysql高效获取数据的数据结构,其本质为》索引是排好序的快速查找数据结构在mysql数据库中,索引也是一张表,该表中存储着索引的值和这个值的数据所在行的物理地址,使用索引后可以不用扫描全表来定位某行的数据,而是通过索引表来找到该行数据对应的物理地址,再根据该物理地址快速定位到该行数据。

       在该表中,存在索引的情况下,新增、修改或删除时,该涉及到数据的物理地址(索引值)更改,对该数据按照一定的规则排列组合,形成新的数据结构,则增、修、改时,操作慢,根据特定算法查询快,所以说,并非索引越多越好。

索引优化分析(一)_第2张图片

2、索引的优缺点

 优点:

          (1)提高数据检索的效率,降低数据库的IO成本

          (2)通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

缺点:

          (1)索引也是一张表,保存着该数据的物理地址、索引值等信息,也要占用空间(磁盘空间)

          (2)降低更新表的速度,如对表进行insert、update或delete操作。因为更新表时,mysql不仅保存数据,还要保存、修改索引信息,调整数据的排序位置

3、索引的分类

(1)单值索引:一个索引只包含单个列,但一个表中可以有多个单列索引(如:唯一索引、主键索引等)。

(2)组合索引:即一个索引包含多个列

创建索引:
	create index index_name on table_name (column1(length),column2(length)...)
修改索引:
	alter table table_name add index index_name on (column1(length),column2(length)...)
删除索引:
	drop index index_name on table_name
查看索引:
	show index from table_name

4、索引的结构(存储引擎实现)

(1)B-Tree索引:在MyISAM和InnoDB存储引擎中的实现不同,默认索引

(2)Hash索引:Mermory默认使用的是hash索引

(3)full-text全文索引

(4)R-Tree索引

5、哪些情况下适合创建索引

(1)主键自动建立唯一索引

(2)频繁做为查询条件的字段应该创建索引

(3)查询中与其他表关联的字段,外键关系建立索引

(4)频繁更新的字段不适合创建索引

(5)where条件用不到的字段不创建索引

(6)单键/组合索引的选择(在高并发下倾向创建组合索引)

(7)查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度

(8)查询中统计或分组的字段

6、哪些情况不适合创建索引

(1)表记录太少

(2)经常增删改的表:因为提高了查询的速度,同时却会降低更新表的速度,如对表进行insert、update或delete时,mysql不仅要保存数据,还要保存索引文件等信息

(3)数据重复且分布平均的表字段,因为某个数据包含许多重复的内容,为它建立索引就没有太大的实际效果·

你可能感兴趣的:(mysql,mysql,索引)