索引介绍。及原理

主键,唯一索引 聚集索引的关系

当数据库表的数据太过庞大,的时候我们能够通过加入索引的形式解决。

聚集索引:数据的实际存储顺序与我们做索引的顺序是一致的,这样的索引我们将它成为聚集索引。

非聚集索引: 数据的实际存储顺序与我们做的索引顺序不一致的时候,像这样的高速查找数据的索引我们将它成为非聚集索引。

  1. --unique唯一索引。clustered聚集索引。nonclustered非聚集索引 。主键是唯一的。所以创建了一个主键的同一时候,也就这个字段创建了一个唯一的索引。
  2.  
  3. SQL SERVER将主键默认定义为聚集索引。其实,索引是否唯一与是否聚集是不相关的。聚集索引能够是唯一索引,也能够是非唯一索引。 唯一索引实际上就是要求指定的列中全部的数据必须不同
  4.  
  5. /*
  6. 主键一唯一索引的差别:
  7.  
  8. 1 一个表的主键仅仅能有一个。而唯一索引能够建多个。
  9. 2 主键能够作为其他表的外键。
  10. 3 主键不可为null。唯一索引能够为null。
  11.  
  12. 聚集索引:将表内的数据依照一定的规则进行排列的文件夹。正由于如此,一个表中的聚焦索引仅仅有一个。对此我们要注意“主键就是聚焦索引”这是极端错误的,是对聚焦索引的一种浪费。(尽管SQLServer默认主键就是聚焦索引)使用聚焦索引的最大优点就是依照查询要求,迅速缩小查询范围,避免进行全表扫描。
  13.  
  14. 其次让每一个数目都不同样的字段作为聚焦索引也不符合“大数目不同情况下不应建立聚集索引的原则”。
  15.  
  16. */
  17.  
  18. use sales
  19. if(exists (select * from sys.indexes where name='IX_TEST_TName'))
  20.  
  21. drop index T_TESX.TX_TEST_TName --假设IX_TEST_TName存在则删除该索引(注意删除索引的时候是 表名.索引名)
  22. create nonclustered index IX_TEST_TName --创建一个非聚集索引索引
  23. on T_Test(name) --为T_Test表的name字段创建索引
  24. with fillfachor=30 --填充因子为30%
  25.  
  26. 能够省略with fillfachor=30这一句,省略即默认
  27. go

~

  1. 唯一索引与主键索引的比較
  2.  
  3. 唯一索引
  4. 唯一索引不同意两行具有同样的索引值。
  5. 假设现有数据中存在反复的键值,则大多数数据库都不同意将新创建的唯一索引与表一起保存。
  6.  
  7. 当新数据将使表中的键值反复时。数据库也拒绝接受此数据。比如,假设在 employee 表中的职员姓氏(lname) 列上创建了唯一索引,则全部职员不能同姓。
  8.  
  9. 主键索引
  10. 主键索引是唯一索引的特殊类型。
  11. 数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。
  12.  
  13. 在数据库关系图中为表定义一个主键将自己主动创建主键索引。主键索引是唯一索引的特殊类型。主键索引要求主键中的每一个值是唯一的。
  14.  
  15. 当在查询中使用主键索引时,它还同意高速訪问数据。
  16.  
  17. 它们的一些比較:
  18. (1)对于主健/unique constraint oracle/sql server/mysql等都会自己主动建立唯一索引;
  19. (2)主键不一定仅仅包括一个字段。所以假设你在主键的当中一个字段建唯一索引还是必要的;
  20. (3)主健可作外健,唯一索引不可。
  21. (4)主健不可为空。唯一索引可;
  22. (5)主健也但是多个字段的组合。
  23. (6)主键与唯一索引不同的是:
  24. a.有not null属性。
  25. b.每一个表仅仅能有一个。
  26.  
  27. 1、主键
  28.  
  29. 主键ID,主键既是约束也是索引,同一时候也用于对象缓存的键值。
  30.  
  31. 2、索引
  32.  
  33. *组合或者引用关系的子表(数据量较大的时候)。须要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段)
  34.  
  35. *索引键的大小不能超过900个字节,当列表的大小超过900个字节或者若干列的和超过900个字节时。数据库将报错。
  36.  
  37. *表中假设建有大量索引将会影响INSERTUPDATEDELETE语句的性能,由于在表中的数据更改时,全部的索引都将必须进行适当的调整。须要避免对常常更新的表进行过多的索引,而且索引应保持较窄,就是说:列要尽可能的少。
  38.  
  39. *为常常常使用于查询的谓词创建索引,如用于下拉參照高速查找的codename等。在平台现有下拉參照的查询sql语句中的like条件语句要改成不带前置通配符。
  40.  
  41. 还有须要关注Order ByGroup By谓词的索引设计,Order ByGroup By的谓词是须要排序的。某些情况下为Order ByGroup By的谓词建立索引,会避免查询时的排序动作。
  42.  
  43. *对于内容基本反复的列。比方仅仅有10,禁止建立索引,由于该索引选择性极差,在特定的情况下会误导优化器做出错误的选择,导致查询速度极大下降。
  44.  
  45. *当一个索引有多个列构成时,应注意将选择性强的列放在前面。仅仅前后次序的不同,性能上就可能出现数量级的差异。
  46.  
  47. *对小表进行索引可能不能产生优化效果,由于查询优化器在遍历用于搜索数据的索引时,花费的时间可能比运行简单的表扫描还长。设计索引时须要考虑表的大小。
  48.  
  49. 记录数不大于100的表不要建立索引。频繁操作的小数量表不建议建立索引(记录数不大于5000条)



SQL 创建索引,语法的更多相关文章

  1. MySQL创建索引语法

    1.介绍: 所有mysql索引列类型都可以被索引,对来相关类使用索引可以提高select查询性能,根据mysql索引数,可以是最大索引与最小索引,每种存储引擎对每个表的至少支持16的索引.总索引长度为 ...

  2. SQL 创建索引的作用以及如何创建索引

    SQL 创建索引的作用以及如何创建索引 SQL 创建索引的作用 一.使用索引的优点: 1.通过唯一性索引(unique)可确保数据的唯一性 2.加快数据的检索速度 3.加快表之间的连接 4.减少分组和 ...

  3. SQL Server索引语法 <第四篇>

    从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ...

  4. SQL创建索引

    http://www.w3school.com.cn/sql/sql_create.asp 注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新.因此,理想的做法 ...

  5. SQL创建索引和删除索引

    使用CREATE 语句创建索引 CREATE INDEX index_name ON table_name(column_name,column_name) include(score) 普通索引 C ...

  6. PL/SQL 创建视图语法

    使用create view 语句创建视图 create [or replace][force | noforce] view [user.] viewName (column [,column2].. ...

  7. SQL Server 索引和视图

    Ø 索引 1. 什么是索引 索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度. 2. 索引分类 数据库中索引主要分为两类:聚集索引和非聚集索引.SQL Serv ...

  8. oracle 创建索引

    一.索引简介 1.索引相当于目录 2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率. 3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取 ...

  9. SQL Server 索引和视图【转】

    Ø 索引 1. 什么是索引 索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度. 2. 索引分类 数据库中索引主要分为两类:聚集索引和非聚集索引.SQL Serv ...

随机推荐

  1. [置顶] macbook 深度休眠和待机

    开发用了macbook pro, 10.8.3, 因为用windows的习惯,一直比较习惯不关机,直接休眠,不是待机standby,今天找到了一个工具,可以实现,亲测通过. 下载:https://gi ...

  2. mavern安装方法

    Installation Instructions Maven is a Java tool, so you must have Java installed in order to proceed. ...

  3. SQL左连接右连接

    假设有A,B两个表.     表A记录如下:   aID     aNum   1     a20050111   2     a20050112   3     a20050113   4      ...

  4. 深入理解 Linux 内存管理

    1. 内存地址 以Intel的中央处理器为例,Linux 32位的系统中.物理内存的基本单位是字节(Byte),1个字节有8个二进制位. 每一个内存地址指向一个字节,内存地址加1后得到下一个字节的地址 ...

  5. exception is the version of xbean.jar correct

      CreateTime--2018年2月5日09:20:00 Author:Marydon 异常: is the version of xbean.jar correct 情景还原: 在使用Java ...

  6. jQuery仿天猫完美加入购物车

    转载自:http://www.iteye.com/topic/1138064 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  7. urlretrieve 如何给文件下载设置下载进度?

    #python #xiaodeng #如何给文件下载设置下载进度? import urllib def callbackinfo(down,block,size): ''' 回调函数: down:已经 ...

  8. 2016年度GitHub上Stars最多的10个项目

    来源于:https://zhuanlan.zhihu.com/p/24627923 2016年接近尾声,在最近的几篇文章中,会整理总结一些2016年度开源项目.今天整理的是:2016年度GitHub最 ...

  9. 使用增强for循环遍历集合的时候操作集合的问题?

    // 遍历一个list public static void printList(List<String> list){ for (String string : list) { list ...

  10. HDUOJ----数塔

    数塔 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission ...