使用索引的全部意义就是通过缩小一张表中需要查询的记录/行的数目来加快搜索的速度。
什么是索引?
一个索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree)。索引是在表的列上创建。所以,要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中
索引是一种数据结构
索引的内容:
数据库索引并不存储这个表中其他列(字段)的值
索引只存储了指向表中某一行的指针
索引的使用时机:
当这个SQL (SELECT * FROM Employee WHERE Employee_Name = ‘Jesus’ )运行时,数据库会检查在查询的列上是否有索引。假设Employee_Name列上确实创建了索引,数据库会接着检查使用这个索引做查询是否合理
索引的使用参考选择性,选择性越低,就越不推荐使用索引
选择性的计算方式:
指数的选择性=基数/(记录数)* 100%
//基数代表着数据的可能性
例:一个10000行记录的性别列
选择性=2/10000
索引的使用决定权:
一般来说由数据库自己决定。然而,值得注意的是在大多数数据库中(像Oracle 和 MYSQL), 实际上可以制订你想要使用的索引。
索引的创建方式:
(联合索引)
CREATE INDEX name_index
ON Employee (Employee_Name, Employee_Age)
索引的使用代价:
索引本身会消耗内存空间
修改数据时,索引也会随着修改
索引提高效率的原因:
有序的排列方式能够更加快速的定位到指定存储数据表行的指针
索引的存储结构:
索引采用了非内存物理顺序而是基于双向链表的逻辑顺序(类似于java中的LinkedList)
索引查找的三个步骤:
遍历树
遵循叶节点链
B-Tree:
B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。
存储在B-Tree中的数据是有序的
哈希表:
哈希表是另外一种你可能看到用作索引的数据结构-这些索引通常被称为哈希索引。
哈希表是无顺的数据结构
哈希表只适合查询键值对
R-Tree:
R-Tree作为数据结构的索引通常用来为空间问题提供帮助
位图索引:
位图索引(bitmap index), 这类索引适合放在包含布尔值(true 和 false)的列上,但是这些值(表示true或false的值)的许多实例-基本上都是选择性(selectivity)低的列。
内容来源:
索引的概念:http://www.programmerinterview.com/index.php/database-sql/what-is-an-index/
主建、外键、索引的区别:https://blog.csdn.net/zhouziyu2011/article/details/69788073
B树的详情:https://zhuanlan.zhihu.com/p/27700617
数据库优化经验:https://blog.csdn.net/javawrq/article/details/53453924
什么是索引?
一个索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree)。索引是在表的列上创建。所以,要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中
索引是一种数据结构
索引的内容:
数据库索引并不存储这个表中其他列(字段)的值
索引只存储了指向表中某一行的指针
索引的使用时机:
当这个SQL (SELECT * FROM Employee WHERE Employee_Name = ‘Jesus’ )运行时,数据库会检查在查询的列上是否有索引。假设Employee_Name列上确实创建了索引,数据库会接着检查使用这个索引做查询是否合理
索引的使用参考选择性,选择性越低,就越不推荐使用索引
选择性的计算方式:
指数的选择性=基数/(记录数)* 100%
//基数代表着数据的可能性
例:一个10000行记录的性别列
选择性=2/10000
索引的使用决定权:
一般来说由数据库自己决定。然而,值得注意的是在大多数数据库中(像Oracle 和 MYSQL), 实际上可以制订你想要使用的索引。
索引的创建方式:
(联合索引)
CREATE INDEX name_index
ON Employee (Employee_Name, Employee_Age)
索引的使用代价:
索引本身会消耗内存空间
修改数据时,索引也会随着修改
索引提高效率的原因:
有序的排列方式能够更加快速的定位到指定存储数据表行的指针
索引的存储结构:
索引采用了非内存物理顺序而是基于双向链表的逻辑顺序(类似于java中的LinkedList)
索引查找的三个步骤:
遍历树
遵循叶节点链
获取表格数据
B-Tree:
B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。
存储在B-Tree中的数据是有序的
哈希表:
哈希表是另外一种你可能看到用作索引的数据结构-这些索引通常被称为哈希索引。
哈希表是无顺的数据结构
哈希表只适合查询键值对
R-Tree:
R-Tree作为数据结构的索引通常用来为空间问题提供帮助
位图索引:
位图索引(bitmap index), 这类索引适合放在包含布尔值(true 和 false)的列上,但是这些值(表示true或false的值)的许多实例-基本上都是选择性(selectivity)低的列。
内容来源:
索引的概念:http://www.programmerinterview.com/index.php/database-sql/what-is-an-index/
主建、外键、索引的区别:https://blog.csdn.net/zhouziyu2011/article/details/69788073
B树的详情:https://zhuanlan.zhihu.com/p/27700617
数据库优化经验:https://blog.csdn.net/javawrq/article/details/53453924