1.索引的概念和建立
1.1.概念:对数据库里面的值进行排序的一种结构。在一张表中为一个字段创建一个索引,将创建另外一个数据结构,包含字段数值以及指向相关记录的指针,然后对这个索引结构进行排序,允许在该数据上进行二分法排序。
1.2.普通索引:ALTER TABLE table_name ADD INDEX index_name ON (column(length))
1.3.唯一索引:ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
1.4.组合索引:ALTER TABLE table_name ADD INDEX indexName(column(length),column1(length),...)
1.5.主键索引:唯一索引的一种特殊形式,不允许为Null,可以被其他表引用为外键,只能有一个。
1.6.外键索引:如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。
2.如何选择合适的列建立索引
2.1.在where从句、group by从句、order by从句、on从句中出现的列。
2.2.索引字段越小越好(数据库的数据存储以页为单位一页存储的数据越多一次IO操作获取的数据越大效率越高)。
2.3.离散大(变量各个取值之间的差异程度)的列放到联合索引的前面,可以通过count()函数查看字段的差异值,返回值越大说明字段的唯一值越多字段的离散程度高。
2.4.尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。
3.索引优化SQL的方法
3.1.盲目增加索引过多会影响查询和写入的效率。
3.2.重复的索引:相同的列以相同的顺序建立同类型的索引(比如在主键字段上面再增加唯一性索引)。
3.3.冗余索引:多个索引的前缀列相同,或者在联合索引中包含主键索引(因为INnoDB会在每个索引的后面附加主键信息)。
3.4.使用pt-dupicate-key-checker工具检查重复索引和冗余索引(pt-dupicate-key-checker -uroot -p123456 -h127.0.1)
4.索引维护的方法
4.1.对不使用的索引进行删除
4.2.对不使用的索引进行统计分析例如: