赵玉伟的博客

索引的使用(1)

创建一个带主键索引的表:

1
2
3
4
5
CREATE TABLE `my_test` (
`id` int(10) unsigned NOT NULL,
`sequence` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB;

增加一个二级索引:

1
alter table my_test add index('sequence');

建表的同时,创建索引:

1
2
3
4
5
6
7
CREATE TABLE `my_test2` (
`id` int(10) unsigned NOT NULL,
`no` int(10) unsigned NOT NULL,
`sequence` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
KEY(no)
) ENGINE=INNODB;

where语句中,以下条件可以用到索引:

  • =,<,<=,>,>=,BETWEEN
  • like也可以使用,但是在用like时, 必须是 like ‘xxxx%’才可以, %放在首位索引会失效

以下条件不能用到索引:

  • <>,not in ,!=
  • 列上有函数或是运算, 比如 where md5(no) = ‘xxxx’, where i + 1 = 2 等
  • 建索引的列为字符串类型, 而查询时没有加’’, 即 where sequence=xxx

以下条件可能会引起索引失效,取决于索引结构与查询语句:

  • or, in

索引是否失效, 需要在sql前面加EXPLAIN 关键字,分析语句

创建索引与使用索引进行查询要相辅相成,查询是否高效取决于

  1. 索引创建是否合理
  2. sql查询语句是否合理

如果单纯在表的某一个列上加索引的话, 比如仅仅在身份证号的列上加索引,比较简单。
而实际应用中, 大多数情况会在一张表的多个列上创建索引,这种索引叫做联合索引, 如果where条件没有协会, 可能会导致索引失效, 下一篇再介绍。