以ftdp项目来说,其多个数据表都会对经常被查询的字段添加索引,比如tin_comments表中针对5个字段设计了BTREE索引。
一、对比测试
mysql> SELECT id,FROM_UNIXTIME(time) FROM article WHERE a.ti='标题'
给ti字段添加一个BTREE索引:
mysql> ALTER TABLE article ADD INDEX index_article_ti ON ti(200);
二、MySQL索引的概念
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。
三、索引的类型
1、普通索引
这是最基本的索引,它没有任何限制,比如上文中为title字段创建的索引就是一个普通索引
创建方式:
直接创建索引
CREATE INDEX index_name ON table(column(length))
修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
删除索引
DROP INDEX index_name ON table
2、唯一索引
与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须是唯一的,创建方法和普通索引类似。
创建唯一索引
CREATE UNIQUE INDEX index_name ON table(column(length))
修改表结构
ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (column(length))
3、组合索引
平时用的SQL查询
语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。例如上表中针对ti和t建立一个组合索引:
ALTER TABLE article ADD INDEX index_titme_time (ti(5),t(1))
建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
–title,t
–title
为什么没有time这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。
简单的理解就是只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索引,如下面的几个SQL所示:
使用到上面的索引
SELECT * FROM article WHREE ti='检查' AND t=1;
SELECT * FROM article WHREE ti='检查';
未使用到上面的索引
SELECT * FROM article WHREE t=1;
以上就是常用的三种索引类型及其创建使用的方法,当然还有其他的类型,这里我就列举我们平时最常用的几种,更详细和全面的索引相关资料请咨询度娘。
来源:oschina
链接:https://my.oschina.net/u/4397965/blog/3232673