一:索引类型(常用)
1.主键索引 primary key
一种特殊的唯一索引,每张表只有一个主键索引,不为空且唯一。
2.唯一索引 unique
索引列的值必须唯一,但是允许空值。如果是组合列,该组合列的值也必须唯一。
3.普通索引 index
是最基本的索引,它没有任何限制
4.组合索引
指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀原则
5.全文索引 fulltext
mysql5.6以前只有 myISAM 的char varchar text 类型支持全文索引,5.6后innoDB也支持。在数据量大的时候,先写入数据在添加全文索引比在写入数据的同时创建索引的速度快很多。
主要用来查找文本中关键字,而不是直接与索引中的值比较。因此用法与其他索引不大相同,不用于where条件来参数匹配,而是配合match agains操作使用。具体用法下方详见:
二:创建索引命令
在建表的时候创建
CREATE TABLE `table_name` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` CHAR(255) NOT NULL DEFAULT '',
`code` CHAR(5) NOT NULL DEFAULT '',
`name` VARCHAR(255) NOT NULL DEFAULT '',
`passwd` VARCHAR(255) NOT NULL DEFAULT '',
`description` TEXT NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE INDEX `code` (`code`),
INDEX `title` (`title`),
INDEX `name_pass` (`name`, `passwd`)
FULLTEXT (`description`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
直接创建
CREATE INDEX name ON `table_name` (`name`)
修改
ALTER TABLE `talbe_name` ADD [INDEX|FULLTEXT|UNIQUE|] {INDEX_NAME ({FIELD1[,FIELD2]});
ALTER TABLE `talbe_name` ADD INDEX name(`name`) ;
三:删除索引命令
ALTER TABLE `table_name` DROP INDEX `title`;
四:索引优缺点及注意事项
优点:
1.大大提高了查询速度
2.通过唯一索引可以确保数据的唯一性
缺点
1.创建索引与维护索引需要花费时间与空间
2.写入数据速度变慢
五:索引查询优化
1.最左前缀匹配
建立联合索引 (a,b,c,d) 时
where a=xx -- 使用索引
where b=yy AND a=xx -- 使用索引
where b= yy -- 未使用索引
mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,
比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,
如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
2. 条件中使用了 OR
WHERE a=1 OR b=2
如果a建立了索引 b未建立索引,该sql是全表扫描-未使用索引
3.like 模糊查询
ike 查询是以%开头 -不走索引
like 查询 %不在起始位置 ,且mysql计算,走索引速度高于全表扫描,才走索引
4.连接查询
连接查询是连接的字段建立索引
网友评论