唯一索引

工具猿之MySQL教程-05-索引详细操作管理

点点圈 提交于 2020-01-01 19:51:01
索引详细操作管理 一、认识索引:       1、了解索引    2、索引分类    3、索引设计原则    二、管理索引:       1、创建索引    2、查看索引    3、删除索引    一、认识索引 了解索引 索引是一种特殊的数据库结构,可以用来快速查询数据库中的特定记录。在MySQL中,所有的数据类型都可以被索引。MySQL支持的索引主要有Hash索引和B-Tree索引。目前,大部分MySQL索引都是以B-Tree(B-树)方式存储,是MySQL数据库中使用最频繁的索引类型。 讨论:    (1)BLOB和TEXT类型字段仅支持前缀索引。    (2)使用 “!=” 以及 “<>” 的时候,MySQL不使用索引。    (3)使用LIKE的时候,以 “%” 开头,即使用 “%****” 的时候无法使用索引;在使用OR的时候。要求OR前后字段都要有索引。    (4)当字段使用函数时候,MySQL无法使用索引;在连接条件字段类型不一致的时候,MySQL无法使用索引;在组合索引里使用非第一个索引时也不使用索引。    (5)索引是一个简单的表,MySQL将一个表的索引都保存到同一个索引文件中,所以索引也是占物理空间的,如果有大量的索引,索引文件可能会比数据文件更快的到达最大的文件尺寸。    (6)在更新的表中引入索引列上的数据时,MySQL会自动地更新索引

翻译: Clustered Index Design Considerations 聚集索引设计注意事项

你。 提交于 2020-01-01 04:56:03
原文出自: 《Pro SQL Server Internals, 2nd edition》 的CHAPTER 7 Designing and Tuning the Indexes中的Clustered Index Design Considerations一节(即P155~P165) ,Dmitri Korotkevitch,侵删 每次更改聚集索引键的值时,都会发生两件事。 首先,SQL Server将行移动到聚集索引页链和数据文件中的不同位置。 其次,它更新了row-id,它是聚集索引键。 存储的行id,需要在所有非聚集索引中更新。 就I / O而言,这可能是昂贵的,特别是在批量更新的情况下。 此外,它可以增加聚集索引的碎片,并且在行ID大小增加的情况下,可以增加非聚集索引的碎片。 因此,最好有一个静态聚集索引,其中键值不会改变。 所有非聚集索引都使用聚集索引键作为row-id。 过宽的聚集索引键会增加非聚集索引行的大小,并且需要更多空间来存储它们。 因此,SQL Server需要在索引或范围扫描操作期间处理更多数据页,这会降低索引的效率。 在非唯一非聚集索引的情况下,row-id也存储在非叶索引级别,这反过来会减少每页索引记录的数量,并可能导致索引中的额外中间级别。 尽管非叶索引级别通常缓存在内存中,但每次SQL Server遍历非聚集索引B-Tree时

设计和调整索引

久未见 提交于 2020-01-01 04:55:49
设计和调整索引   无法定义可在任何地方使用的索引策略。每个系统都是独一无二的,需要基于工作负载,业务需求和其他一些因素的自己的索引方法。但是,有几个设计考虑因素和指南可以应用于每个系统。   当我们优化现有系统时也是如此。虽然优化是一个在每种情况下都是独特的迭代过程,但是有一组技术可用于检测每个数据库系统中的低效率。 在本章中,我们将介绍在设计新索引和优化现有系统时需要记住的几个重要因素。 聚集索引设计注意事项   每次更改聚簇索引键的值时,都会发生两件事。首先, SQL Server 将行移动到聚簇索引页链和数据文件中的不同位置。其次,它更新了 row-id ,它是聚集索引键。存储了行 id ,需要在所有非聚簇索引中更新。就 I / O 而言,这可能是昂贵的,特别是在批量更新的情况下。此外,它可以增加聚簇索引的碎片,并且在行 ID 大小增加的情况下,可以增加非聚簇索引的碎片。因此,最好有一个静态聚簇索引,其中键值不会改变。    所有非聚簇索引都使用聚簇索引键作为 row-id 。过宽的聚簇索引键会增加非聚簇索引行的大小,并且需要更多空间来存储它们。因此, SQL Server 需要在索引或范围扫描操作期间处理更多数据页,这会降低索引的效率。    在非唯一非聚簇索引的情况下, row-id 也存储在非叶索引级别,这反过来会减少每页索引记录的数量,并可能导致索引中的额外中间级别

翻译之:设计和调整索引

风格不统一 提交于 2020-01-01 04:55:38
文章选自:《Pro SQL Server Internals, 2nd edition》CHAPTER 2 Tables and Indexes 作者:Dmitri Korotkevitch 第七章 设计和调整索引 It is impossible to define an indexing strategy that will work everywhere. Every system is unique and requires its own indexing approach based on workload, business requirements, and quite a few other factors. However, there are several design considerations and guidelines that can be applied in every system. 我们无法定义可在任何地方使用的索引策略。 每个系统都是独一无二的,需要基于工作负载,业务需求和其他一些因素定义自己的索引方法。但是,还是有几个设计考虑因素和指南可以应用于每个系统。 The same is true when we are optimizing existing systems. While optimization is an

sql 性能优化 索引碎片

可紊 提交于 2019-12-29 02:10:09
1、索引 简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率。 (1). 优点 大大加快了数据库检索的速度,包括对单表查询、连表查询、分组查询、排序查询。经常是一到两个数量级的性能提升,且随着数据数量级增长。 (2). 缺点 索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加。 在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响。 a. 直接创建索引和间接创建索引 直接创建: 使用sql语句创建,Android中可以在SQLiteOpenHelper的onCreate或是onUpgrade中直接excuSql创建语句,语句如 CREATE INDEX mycolumn_index ON mytable ( myclumn ) 间接创建: 定义主键约束或者唯一性键约束,可以间接创建索引,主键默认为唯一索引。 b. 普通索引和唯一性索引 普通索引: CREATE INDEX mycolumn_index ON mytable ( myclumn ) 唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用,语句为 CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable (

MySQL索引(详细解释)

女生的网名这么多〃 提交于 2019-12-26 22:57:21
什么是索引 索引是一种 可以加快检索的数据结构 ,它 包含从表或者视图的一列或者多列生成的键 ,以及 映射到指定数据存储位置的指针 。 我们可以把数据库看成一本书,索引就是书的目录,借助目录查找信息,显然要比没有目录的书查起来要方便快捷。 索引的作用就是提高查询效率 那么索引能提高查询效率,我们就要创建很多索引么? 不是的,索引最终是存储在硬盘上的,索引越多,那么存储索引的文件就会越大,电脑在使用索引的时候,是先将索引文件加载到内存上,然后再加载到CPU上。所以,索引如果过多,会加重内存和磁盘的交互负担。 并且,数据的改动也会对索引造成影响。 总结:索引可以提高查询效率,但并不是越多越好,过多的索引会引起磁盘I/O的交互频繁,并且数据改动,索引也会受到影响。 索引分类 普通索引 :没有任何条件现制,可以给任意字段添加普通索引。 Student表中的字段有SID,Sname,Sage,Ssex, 对其中任意的一个字段都可以创建索引,没有任何现制,这就是普通索引 唯一性索引 :唯一性索引顾名思义,它可以保证索引中的所有的值都是唯一的,使得表中的每一行在某种方式上都具备唯一性。所以, 只有当唯一性是数据本身的特征的时候,指定唯一性索引才有意义。 例如:主键,在表中是不能重复的,主键索引,就是唯一性索引。 SID就是Student表的主键,SID是不会重复的字段,也就是唯一性字段

Mysql索引整理总结

好久不见. 提交于 2019-12-26 07:54:13
转自:https://blog.csdn.net/u010648555/article/details/81102957 一、索引概述 1. 简介 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,可以通过目录快速查找书中指定内容的位置,对于数据库表来说,可以通过索引快速查找表中的数据。 2. 索引的原理 索引一般以文件形式存在磁盘中(也可以存于内存中),存储的索引的原理大致概括为以空间换时间,数据库在未添加索引的时候进行查询默认的是进行全量搜索,也就是进行全局扫描,有多少条数据就要进行多少次查询,然后找到相匹配的数据就把他放到结果集中,直到全表扫描完。而建立索引之后,会将建立索引的KEY值放在一个n叉树上(BTree)。因为B树的特点就是适合在磁盘等直接存储设备上组织动态查找表,每次以索引进行条件查询时,会去树上根据key值直接进行搜索。 3. 索引的优点 建立索引的目的是加快对表中记录的查找或排序! ① 建立索引的列可以保证行的唯一性,生成唯一的rowId ② 建立索引可以有效缩短数据的检索时间 ③ 建立索引可以加快表与表之间的连接 ④ 为用来排序或者是分组的字段添加索引可以加快分组和排序顺序 4. 索引的缺点 ① 创建索引和维护索引需要时间成本

唯一索引、聚集索引和聚集索引

烈酒焚心 提交于 2019-12-24 14:12:43
1.一个表只能有一个主索引-PRIMARY,且只有是数据库表才有主索引,后缀为.CDX,索引关键字是不可以重复的.哪怕是空记录也只可以有一条.2.候选索引可以有很多个,索引关键字同样不可以重复,同样只存在于数据库表.3.唯一索引,可以存在于自由表,但索引关键字不可以重复.4.普通索引简单的理解就是只起排序作用.索引关键字是可以重复的.可存在于自由表. 主键与唯一索引的区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + 唯一索引了。 主键可以被其他表引用为外键,而唯一索引不能。 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。 CREATE UNIQUE INDEX test_UniqueKey ON test (UniqueKey); 聚集索引: 聚集索引基于数据行的键值,在表内排序和存储这些数据行。每个表只能有一个聚集索引,应为数据行本分只能按一个顺序存储。 在聚集索引中,表中各行的物理顺序与索引键值的逻辑(索引)顺序相同

MySQL高频面试题的灵魂拷问

依然范特西╮ 提交于 2019-12-19 10:23:04
唯一索引比普通索引快吗, 为什么? 唯一索引不一定比普通索引快, 还可能慢。 查询时, 在未使用limit 1的情况下, 在匹配到一条数据后, 唯一索引即返回, 普通索引会继续匹配下一条数据, 发现不匹配后返回. 如此看来唯一索引少了一次匹配, 但实际上这个消耗微乎其微. 更新时, 这个情况就比较复杂了. 普通索引将记录放到change buffer中语句就执行完毕了. 而对唯一索引而言, 它必须要校验唯一性, 因此, 必须将数据页读入内存确定没有冲突, 然后才能继续操作. 对于 写多读少 的情况, 普通索引利用change buffer有效减少了对磁盘的访问次数, 因此普通索引性能要高于唯一索引. MySQL由哪些部分组成, 分别用来做什么 Server 连接器: 管理连接, 权限验证. 分析器: 词法分析, 语法分析. 优化器: 执行计划生成, 索引的选择. 执行器: 操作存储引擎, 返回执行结果. 存储引擎: 存储数据, 提供读写接口. MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更. 查询缓存可能会失效非常频繁, 对于一个表, 只要有更新, 该表的全部查询缓存都会被清空. 因此对于频繁更新的表来说, 查询缓存不一定能起到正面效果. 对于读远多于写的表可以考虑使用查询缓存. 8.0版本的查询缓存功能被删了 ( ̄. ̄).

SQl浅谈 索引

廉价感情. 提交于 2019-12-17 16:49:08
1、索引的工作原理 我给大家推荐一个别人的总结。 http://blog.csdn.net/NightManHAHA/article/details/5648579 2、索引的设计原则 对于一张表来说,索引的有无和建立什么样的索引,要取决与where字句和Join表达式中。 一般来说建立索引的原则包括以下内容: 主键列:系统一般会自动建立聚集索引。 非主键列:有大量重复值并且经常进行条件查询、排序、分组的列,或者经常频繁访问的列,考虑建立聚集索引。 如果在一个经常做插入操作的表中建立索引,应使用fillfactor(填充因子)来减少页分裂,同时提高并发度降低死锁的发生。如果在表为只读表,填充因子可设为100。 另外我们在选择索引键的时候,尽量采用小数据类型(最好是整数)的列作为索引键,这样每个索引页能尽可能多的容纳索引键和指针,用整数的好处是因为整数的访问速度最快。 3、使用索引的注意事项 动作描述 使用聚集索引 使用非聚集索引 外键列 应 应 主键列 应 应 列经常被分组排序(order by) 应 应 返回某范围内的数据(BETWEEN、>、>=、< 和 <=) 应 小数目的不同值 应 大数目的不同值 应 频繁更新的列 应 频繁修改索引列 应 一个或极少不同值 4、索引的分类 按存储结构区分 : “聚集索引(又称聚类索引,簇集索引)”,“分聚集索引(非聚类索引,非簇集索引)”