MySQL的索引分析

MySQL的索引的分类:

一、单值索引(普通索引)

二、唯一索引

三、复合索引

四、主键索引

五、Full-text索引(全文索引)

 

 

单值索引

普通索引:即只包含一个列的索引,一个表可有多个单值索引

 

创建索引的语句:

CREATE INDEX index_name ON table(column(length))

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

CREATE TABLE `table` (

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `name` char(255) CHARACTER NOT NULL ,

    PRIMARY KEY (`id`),

    INDEX index_name (name(length))

)

 

 

唯一索引

索引的值必须是唯一的,但是允许有空值

 

创建索引的语句:

CREATE UNIQUE INDEX indexName ON table(column(length))

ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))

CREATE TABLE `table` (

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `name` char(255) CHARACTER NOT NULL ,

    UNIQUE indexName (name(length))

);

 

复合索引

一个索引包含多个列,但是使用复合索引的时候需要遵循最佳左前缀法则(即查询从索引最左列开始,并且不跳过索引中的列)

 

创建索引的语句:

ALTER TABLE `table` ADD INDEX name_addr_age (name,addr,age);

 

主键索引

特殊的一种索引,不允许有空值,在表创建时便同时创建

 

 

Full-text索引(全文索引)

主要是用来查找文本中的关键字,只有在char varchar text的列上创建该索引

(tips:如果在创建大数据量的表的时候,建议先插入数据再建该索引)

(原因:索引便于查找,但是对于增删频繁的表来说会变得更消耗性能)

 

创建索引的语句:

CREATE FULLTEXT INDEX index_content ON table(content)

ALTER TABLE table ADD FULLTEXT index_content(content)

CREATE TABLE `table` (

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `content` text CHARACTER NULL ,

    PRIMARY KEY (`id`),

    FULLTEXT (content)

);

 

 

需要建立索引的情况

1. 频繁作为查询的字段

2. 外键关系

3. 查询中排序的字段,排序字段如果通过索引进行查询会提高排序的效率

4. 查询中统计或分组字段

待补充!!!

 

不需要建立索引的情况

1. 表记录太少

2. 经常增删的表(因为更新表的时候,会同时更新索引,保存索引的文件,加重IO负担)

3. 数据列中的内容重复且分布平均

待补充!!!

 

索引失效的情况

1. 复合索引使用时不遵循最佳左前缀法则

2. 在索引列上进行计算、函数、类型转换(包含隐式)会导致索引失效而进行全表扫描

3. 减少使用select *

4. like %aaa%” 不会使用索引而like aaa%”可以使用索引

5. 字符串不加单引号会导致索引失效

6. Is nullis not null 会导致索引失效

待补充!!!

猜你喜欢

转载自blog.csdn.net/adrian_dai/article/details/79464690