MySQL索引记录

落花浮王杯 提交于 2020-04-13 13:15:51

【今日推荐】:为什么一到面试就懵逼!>>>

以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;

以上就是常用的三种索引类型及其创建使用的方法,当然还有其他的类型,这里我就列举我们平时最常用的几种,更详细和全面的索引相关资料请咨询度娘。





 

发布了205 篇原创文章 · 获赞 47 · 访问量 8万+
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!