聚集索引

Mysql --聚集索引与非聚集索引

邮差的信 提交于 2019-11-27 01:34:00
转自: https://www.cnblogs.com/s-b-b/p/8334593.html 一.索引简介 众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及非聚集索引用的是B+树索引。这篇文章会总结SQL Server以及MySQL的InnoDB和MyISAM两种SQL的索引。 SQL Sever索引类型有:唯一索引,主键索引,聚集索引,非聚集索引。 MySQL 索引类型有:唯一索引,主键(聚集)索引,非聚集索引,全文索引。 二.聚集索引 聚集(clustered)索引,也叫聚簇索引。 定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。 单单从定义来看是不是显得有点抽象,打个比方,一个表就像是我们以前用的新华字典,聚集索引就像是拼音目录,而每个字存放的页码就是我们的数据物理地址,我们如果要查询一个“哇”字,我们只需要查询“哇”字对应在新华字典拼音目录对应的页码,就可以查询到对应的“哇”字所在的位置,而拼音目录对应的A-Z的字顺序,和新华字典实际存储的字的顺序A-Z也是一样的,如果我们中文新出了一个字,拼音开头第一个是B,那么他插入的时候也要按照拼音目录顺序插入到A字的后面,现在用一个简单的示意图来大概说明一下在数据库中的样子: 地址 id

海量数据处理之数据库索引

时间秒杀一切 提交于 2019-11-26 21:50:21
前言:本文第一部分讨论数据库的索引及其优化,主要以sql server为例,第二部分我们从Mysql讨论它背后的数据结构和算法原理。 第一部分,数据库索引及其优化 一,什么是索引   数据库索引好比是一本书前面的目录,能加快数据库的查询速度。   例如这样一个查询:select * from table1 where id=44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。   索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;显然在一个基本表上最多只能建立一个聚簇索引。建立聚簇索引后,更新该索引列上的数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新得列不宜建立聚簇索引,聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。建立一个聚簇索引如: create cluster index id on Student(id); 二,概述   建立索引的目的是加快对表中记录的查找或排序。   为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。 精简来说

第515篇--Interview Summary (Sql Server)

怎甘沉沦 提交于 2019-11-26 21:36:37
在面试的时候, SQL 也是一个重点,总结一下以前的面试题目: 1 面试常见问题 SQL 聚集索引和非聚集索引 1) 我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。 2) 非聚集索引:我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。 但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。 我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。它也许同时有主题索引和作者索引。同样,一个表可以有多个非聚簇索引. 2 防止 SQL 注入的常用方式 ok 1:过滤掉特殊字符用户输入内容中的所有连字符,防止攻击者构造出类如. 2 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行

MySQL-4- 索引及执行计划

梦想与她 提交于 2019-11-26 17:27:08
1. 索引作用 提供了类似于书中目录的作用,目的是为了优化查询 2. 索引的种类(算法) B树索引 Hash索引 R树 Full text GIS 3. B树 基于不同的查找算法分类介绍 B-tree B+Tree 在范围查询方面提供了更好的性能(> < >= <= like) B*Tree 4. 在功能上的分类 4.1 辅助索引(S)怎么构建B树结构的? (1). 索引是基于表中,列(索引键)的值生成的B树结构 (2). 首先提取此列所有的值,进行自动排序 (3). 将排好序的值,均匀的分布到索引树的叶子节点中(16K) (4). 然后生成此索引键值所对应得后端数据页的指针 (5). 生成枝节点和根节点,根据数据量级和索引键长度,生成合适的索引树高度 id name age gender select * from t1 where id=10; 问题: 基于索引键做where查询,对于id列是顺序IO,但是对于其他列的查询,可能是随机IO. 4.2 聚集索引(C) 4.2.1 前提 (1)表中设置了主键,主键列就会自动被作为聚集索引. (2)如果没有主键,会选择唯一键作为聚集索引. (3)聚集索引必须在建表时才有意义,一般是表的无关列(ID) 4.2.2 辅助索引(S)怎么构建B树结构的? (1) 在建表时,设置了主键列(ID) (2) 在将来录入数据时

SQL的表连接方式有哪些?

拥有回忆 提交于 2019-11-26 14:45:34
SQL中连接按结果集分为:内连接,外连接,交叉连接 内连接:inner join on,两表都满足的组合。内连接分为等值连接,不等连接,自然连接。 等值连接:两表中相同的列都会出现在结果集中。 自然连接:两表中具体相同列表的列会合并为同一列出现在结果集中。 外连接:分为左(外)连接,右(外)连接,全连接 左(外)连接:A left (outer) join B,以A表为基础,A表的全部数据,B表有的组合,没有的为。 右(外)连接:A right(outer) join B,以B表为基础,B表的全部数据,A表有的组合,没有的位null。 全连接:A full (outer) join 两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有,A表没有的显示为null。 交叉连接:cross join,就是笛卡尔乘积。 2、三范式 1NF:表中的字段都是单一属性,不再可分。 2NF:在1NF的基础上,表中所有的非主属性都必须完全依赖于任意一组候选键,不能仅依赖于候选键中的某个属性。 3NF:在2NF的基础上,表中所有的属性都不依赖其他非主属性。 简单的说就是:1NF表示每个属性不可分割,2NF表示非主属性不存在对主键的部分依赖,3NF表示不存在非主属性对主键的依赖传递。 3、表的操作 表的创建:create table 表名 (列名1 类型 约束,列2 类型 约束…)

关系数据库的查询优化策略一

随声附和 提交于 2019-11-26 11:29:16
关系数据库的查询优化策略一(转) 1 引言 随着计算机应用技术的不断普及和发展,数据库系统正越来越多的走进人们的日常生活。在要求查询结果正确无误的同时,人们越来越关心查询的效率问题。影响查询效率的因素很多,诸如处理器的速度、 I/O 速度、存储器的容量、操作系统、采取何种的数据库服务系统等。但是对于特定服务器来说查询的效率主要取决于 DBA (数据库管理员)所给定的查询语句。 2 合理使用索引 数据库服务器对数据进行访问一般采用下面的两种方式: ① 索引扫描,通过索引访问数据; ② 表扫描,读表中的所有页。当对一个表进行查询时,如果返回的行数占全表总行数的 10% 到 15% 时,使用索引可以极大的优化查询的性能。但是如果查询涉及到全表 40% 以上的行时,表扫描的效率比使用索引扫描的效率高。在具体使用的过程中,要结合实际的数据库和用户的需求来确定要不要索引以及在什么字段上建立什么样的索引。下面给出一些通用的规则: 1. 在经常用作过滤器或者查询频率较高字段上建立索引; 2. 在 SQL 语句中经常进行 GROUP BY 、 ORDER BY 的字段上建 立索引; 3. 在不同值较少的字段上不必要建立索引,如性别字段; 4. 对于经常存取的列避免建立索引; 5. 用于联接的列(主健 / 外健)建立索引; 6. 在经常存取的多个列上建立复合索引

SQL语句书写技巧

我与影子孤独终老i 提交于 2019-11-26 11:28:40
SQL结构化查询字符串的改写,是实现数据库查询性能提升的最现实.最有效的手段,有时甚至是唯一的手段, 比如在不允许大幅度修改现有数据库结构的情况下。 通过优化SQL语句提高查询性能的关键是: ? 根据实际需求情况,建立合适的索引; ? 使用一切可能的方式去利用好索引,避免全表扫描; ? 尽量减少内存及数据I/O方面的开销 一. 建立索引 (一)建立"适当"的索引,是快速查询的基础。 索引( index )是除表之外另一重要的.用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据 时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据SELECT语句成功地检索到结果,但随 着表变得越来越大,使用"适当"的索引的效果就越来越明显。注意,在这句话中,我们用了"适当"这个词, 这是因为,如果使用索引时不认真考虑其实现过程,索引既可以提高也会破坏数据库的工作性能。 索引实际上是一种特殊的目录,SQL SERVER提供了两种索引: ? 聚集索引( clustered index ,也称聚类索引.簇集索引) 我们把这种正文内容本身就是一种按照一定规则排列的目录称为"聚集索引"。 例如: 汉语字典中按拼音查某一个字,就是使用"聚集索引",实际上,你根本用不着查目录,直接在字典正文里找, 就能很快找到需要的汉字(假设你知道发音)。 ? 非聚集索引(non clustered

SQL Server查询优化和事务处理

隐身守侯 提交于 2019-11-26 04:34:03
对于了解掌握SQL的增、删、改、查的语句操作是最基本的,实际生产环境中,我们还会用到一些比较高级的数据处理和查询,包括索引、视图、存储过程和触发器。本篇博文主要如何更好的实现对数据库的操作、诊断及优化。 博文大纲: 一、索引; 二、视图; 三、存储过程; 四、触发器; 五、事务; 一、索引 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,再跟随指针到达包含该值的列。 1.什么是索引 数据库中的索引与书籍中的目录相似。在一本书中,无需阅读整本书,利用目录就可以快速的查找到所需的信息。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据。书中的目录就是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或若干列值的集合,以及物理表示这些值得数据业的逻辑指针清单。 索引是SQL Server编排数据的内部方法,它为SQL Server提供一种方法来编排查询数据的路由。 索引页是数据库中存储索引的数据页。索引页存放检索数据行的关键字页以及该数据行的地址指针。通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。 2.索引分类 在SQL Server中,常用的索引有: (1)唯一索引 唯一索引不允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则一般情况下大多数数据库不允许创建唯一索引