mysql索引

来源:互联网 发布:大数据股票毕业设计 编辑:程序博客网 时间:2024/06/02 05:30

什么是索引?

现在有一本关于mysql的书,内容800页。现在让你找到讲解索引的章节。
但是,没有目录,OK,你只能从头到尾一点点的找,一页一页的去找。

你翻啊翻啊,翻了10分钟,翻到652页,终于找到了索引章节,不容易


如果有目录呢?

这时你打开目录,在目录的第2页,你定位到“索引”章节在第652页。瞬间,你就翻到了652页。


其实,索引,就相当于一本书的目录。
上面的情景我们可以写成一条SQL语句,如下:

SELECT `索引页码` FROM mysql书籍 WHERE 章节名="索引"; 

如何加索引

我们来回顾一下上面的语句:

SELECT `内容` FROM mysql书籍 WHERE 章节名="索引"; 

如果我们要加索引的话,肯定是对WHERE后面的字段加索引,即对“章节名”加索引。因为我们就是按照“章节名”来查找的对应的内容,章节名是我们查找的条件,索引。

所以我们要对章节名加索引。

那么,我们得出一个结论:

加索引,并不是要为查找的字段加索引,而是为WHERE后面的字段加索引。
就像上面,并不是为索引章节内容加索引,而是为章节名加索。

索引的分类

此处,对于全文索引或其他索引,我们不讲解,只讲解最常见的索引。

普通索引:普通的索引没有什么特殊的,就是实现了索引的基本功能。

唯一索引:唯一索引,也就是索引的字段不能有重复的,必须是唯一的。

局部索引:即只对索引的字段索引一部分,这样可以有效减少索引的存储大小,降低插入、删除操作对于索引维护的开销。

全文索引:全文索引在InnoDB中暂不支持,也不常用,不说了。

索引的数据结构

索引的数据结构,一般有B-TREE和HASH类型的数据结构。我们最常用的书B-TREE类型的索引结构。
什么是B-TREE,不了解也没太大的关系,但是了解一些基本的B-TREE概念,对于理解索引的数据结构还是大有裨益的。

建议:下面这篇文章有讲B-TREE,有例子,好明白,可以参考一下。

Mysql索引原理即概述

设计索引的一些简单原则

索引,不一定是所选择的列,一般是where后面的列(字段)

索引,不是越多越好。索引越多,意味着维护索引的成本增加,意味着插入删除开销大。要建立合适的索引。

尽可能的建立前缀索引,这样可以减少索引的开销。

如何加索引

根据上面,我们只考虑普通索引和唯一索引。
加索引,用如下语法:

CREATE [UNIQUE] INDEX index_name ON table_name(col_name)

查看索引的使用状态

show

show status like 'handler_read%';
mysql> show global status like 'handler_read%';+-----------------------+-------+| Variable_name         | Value |+-----------------------+-------+| Handler_read_first    | 3     || Handler_read_key      | 0     || Handler_read_last     | 0     || Handler_read_next     | 0     || Handler_read_prev     | 0     || Handler_read_rnd      | 0     || Handler_read_rnd_next | 14    |+-----------------------+-------+7 rows in set (0.04 sec)

Handler_read_key 代表一行被索引值读到的次数,值越高,代表索引建立的越好。
Handler_read_rnd_next 表明正在建立大量的表扫描,值越高,代表索引建立的不好,应该优化索引。

范例

待续…

如果读不懂

请恕我才疏学浅,如果我上面的读不懂,请看下面一位大牛写的文章:
10分钟入门Mysql索引

0 0
原创粉丝点击