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索引
- MySQL索引 聚集索引
- mysql 索引 & 索引类型
- MySQL索引 聚集索引
- mysql 索引 & 索引类型
- mysql索引
- mysql索引
- mysql 索引
- MySql索引
- Mysql索引
- mysql 索引
- mysql 索引
- MySQL索引
- mysql索引
- mysql 索引
- mysql索引
- mysql 索引
- MySQL索引
- mysql索引
- JVM运行时数据区浅析
- Linux 标准目录结构
- hog检测的一点理解
- 让WordPress主题支持语言本地化
- easyui datagrid 的时间不能正确显示
- mysql索引
- JavaScript模块规范,AMD规范和CMD规范
- Android API Guides---Localizing with Resources
- android 6.0 and sdk23, when used xx.so has text relocations. bug
- JVM内存设置
- docker命令记录
- 要求从用户输入的多行文本中提取学生的姓名、学号及登录日期,并封装到 Student 类中作为类的私有属性。创建一个 Student 类型的对象数组,对学号进行 升序排序并输出
- SQL Server中如何快速比较两张表的不一样
- 开源代码网站