sql索引

转载 2018年04月16日 00:01:32
使用索引的全部意义就是通过缩小一张表中需要查询的记录/行的数目来加快搜索的速度。
什么是索引?
一个索引是存储的表中一个特定列的值数据结构(最常见的是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

SQL索引详解

SQL中的索引分为两种,一种为聚集索引和非聚集索引,下面介绍两者的异同。 一、聚集索引与非聚集索引:   1、聚集索引:   聚集索引的意思可以理解为顺序排列,比如一个主键自增的表即为聚集索引,即i...
  • HappyHeng
  • HappyHeng
  • 2016-11-12 22:05:45
  • 20915

SQL 索引的用法

下面测试的数据是3852916条记录。测试环境是 os:windows xp sp2, 内存:1G,cpu:双核 2.66 GHZ。(1)ItemTransaction 表什么都没有,没有主键,没有外...
  • wobuwei
  • wobuwei
  • 2009-08-26 11:44:00
  • 4358

SQL 在表中建立索引的作用

转贴:http://wenwen.soso.com/z/q120134455.htm索引的作用就在于,为某个字段建立了索引之后,查询这个字段里面的数据的时候,效率更高,也就是快,比如create in...
  • GUANYIJUN123
  • GUANYIJUN123
  • 2011-05-02 21:34:00
  • 8592

SQL 优化之索引

SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将...
  • zyh_1988
  • zyh_1988
  • 2016-07-13 16:04:14
  • 549

SQL SERVER——索引的重要性

前面很多篇不管CPU、内存、磁盘、语句等等等都提到了索引的重要,我想刚刚开始学数据库的在校学生都知道索引对语句性能的重要性。但他们可能不知道,对语句的重要性就是对系统的重要性!   开篇小测验 ...
  • z_cloud_for_SQL
  • z_cloud_for_SQL
  • 2017-02-15 16:50:57
  • 1246

sql索引类型

索引类型唯一索引:唯一索引不允许两行具有相同的索引值主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空聚集索引(Cluster...
  • laodao1
  • laodao1
  • 2009-10-21 17:34:00
  • 5205

SQL Server 索引的创建和使用

什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音...
  • dragon_ton
  • dragon_ton
  • 2015-09-21 10:12:54
  • 3446

sql的索引选取原则

1、  表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。尤其是在主键字段创建索引时,cardinality(基...
  • IT_COOKIE_SAM
  • IT_COOKIE_SAM
  • 2017-02-04 16:40:45
  • 799

什么样的sql不走索引

什么样的sql不走索引 要尽量避免这些不走索引的sql SELECT `sname` FROM `stu` WHERE `age`+10=30;-- 不会使用索引,因为所有索引列参与了计算 ...
  • bigtree_3721
  • bigtree_3721
  • 2017-05-18 15:40:57
  • 1140

SQL 强制指定索引加快查询速度

今天遇到一个查询问题,多加了一个查询参数导致查询超时报黄,经过公司DBA改进,涨姿势了。现在发出来跟大家分享一下!~ SELECT m.* FROM TB_UserSiteGroup u W...
  • qq380107165
  • qq380107165
  • 2015-05-05 15:12:35
  • 13175
收藏助手
不良信息举报
您举报文章:sql索引
举报原因:
原因补充:

(最多只允许输入30个字)