1、索引的定义

  索引是数据库表中一列或多列的值进行的一种排序,用于快速找出在某一列中特定的值。

2、索引的原理

  如果不使用索引,则通常的查询数据中,需要对表中数据做一一对应的比较,直到找出所有相关的行为止。也就是说,当数据库表中数据量越大,则查询效率越低;而索引则是迅速到达一个位置,查询数据文件,而不必查询所有数据。简单来讲,索引即如目录一样,先找到对应的目录,然后根据保存在索引中的rowid,快速找到所需的对应数据。

3、索引的特点

  a.优点:加快了查询的速率,这是索引最重要的意义所在

      加快了表与表之间的链接,特别是在数据的参照完整性方面(参照完整性是通过定义外键与之间的对应关系来实现的),有特别的意义

      在使用分组和排序子句进行查询时,也可以显著减少查询中分组和排序的时间

  b.缺点:在创建和维护索引时,需要耗费时间,而且伴随着数量的增加,其耗费的时间也在增加

      索引需要占据一定的磁盘空间。除了数据表占据数据空间之外,每一个索引都要占据一定的物理空间,当随着数据量越来越大的时,索引所占据的空间甚    至大于数据空间在对数据表进行增、删、改的时候,索引也需要进行动态的维护,这就增加了系统的负担,降低了维护的速度。 

4、索引的分类

  a.普通索引和唯一索引

  普通索引:允许数据表列中有空值和重复;

  唯一索引:允许数据表列中有空值,但不许重复。主键是一种特殊的唯一索引,因为主键不许为空;

  写法:create index 索引名 on 表 (字段名)--------------普通索引

     create unique index 索引名 on 表 (字段名)-------唯一索引

  b.单列索引和组合索引

  单例索引:一个索引只指定一个列,一个表中可以有多个单例索引

  组合索引(复合索引):一个索引列包含了表中多个字段,最多可以包含16个字段,只有在查询条件中使用到左边字段时,组合索引才会有效。组合索引坚持一个原则,使用频率越高的字段,排在最前面。

  写法:create unique index 索引名 on 表 (字段名1,字段名2,...)----组合索引

  c.全文索引

  全文索引类型为fulltext,在定义列的值上支持全文查找,允许列插入重复或空值,全文索引可以在char、varchar、text、clob等类型的列上创建,其表现形式类似于like函数,而全文索引主要通过contains来实现。例如  select * from 表名 where contains((字段1,字段2),'姚明')。另外,在MySQL中只有MyISAM存储引擎支持全文索引

  

5、索引的设计原则

  索引的设计是为了提高数据的查询速率,但是如果不好的索引设计不仅会占据大量的磁盘空间、还会对系统性能造成很大的影响。

  1、数据量较少的数据库表,不必添加索引。因为遍历索引的时间可能比普通查询的时间都要长,这时候的索引不会产生任何优化的效果。

  2、经常进行增、删、改的数据库表,尽量少的添加索引。因为每一次对表的DDL操作,在对表数据做更改的同时,相应的索引也会进行更新和调整。

  3、对于条件表达式中经常用到的字段,但其不同值较少的字段则没必要添加索引。比如,在性别字段,只有‘男’、‘女’,则没必要添加索引,否则的话不仅会降低更新数据时候的性能,而且对查询的时候也没有任何性能上的提高。

  4、在频繁使用order by或group by的字段上添加索引,如果是多个字段的话,可以使用组合索引。

  5、当某个字段有唯一性(unique)特征时,可以使用唯一索引。不仅可以确保数据的完整性,也提高了查询性能。

  

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

正如 火狐总裁Tristan Nitot 在解释Firefox成功原因时,Tristan Nitot说:“在近6年的时间里,Web技术不断发展的同时,浏览器却并未有任何改善,因为微软已经睡着了。”

而我也相信,如今的技术每天都在更新,如果我们今天睡着,明天我们就已经落后了。

我的每一句话都是自己手打,我不能保证每一句话的正确,但我保证每一个字都已经用心。------愿我们一起进步

SQL索引--基础理论的更多相关文章

  1. SQL索引学习-索引结构

    前一阵无意中和同事讨论过一个SQL相关的题(通过一个小问题来学习SQL关联查询),很惭愧一个非常简单的问题由于种种原因居然没有回答正确,数据库知识方面我算不上技术好,谈起SQL知识的学习我得益于200 ...

  2. SQL索引学习-聚集索引

    这篇接着我们的索引学习系列,这次主要来分享一些有关聚集索引的问题.上一篇SQL索引学习-索引结构主要是从一些基础概念上给大家分享了我的理解,没有实例,有朋友就提到了聚集索引的问题,这里列出来一下: 其 ...

  3. 数据库性能优化:SQL索引

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引 ...

  4. SQL索引一步到位

    以下均非原创,仅供分享.学习!!! SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? S ...

  5. {好文备份}SQL索引一步到位

    SQL索引一步到位(此文章为"数据库性能优化二:数据库表优化"附属文章之一)   SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百 ...

  6. 转载:SQL索引一步到位

    原文: http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文 ...

  7. SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)

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

  8. SQL索引详解

    转自:http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可 ...

  9. 数据库性能优化一:SQL索引一步到位

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引 ...

随机推荐

  1. 微信小程序实例教程(三)

    第七章:微信小程序编辑名片页面开发   编辑名片有两条路径,分为新增名片流程与修改名片流程. 用户手填新增名片流程:   首先跳转到我们的新增名片页面 1 需要传递用户的当前 userId,wx.na ...

  2. 无法访问 ASP 兼容性模式

    <%@ Page Title="" Language="C#" MasterPageFile="../theme/classic/content ...

  3. Ubuntu下搭建C++开发环境

    Ubuntu使用eclipse搭建c/c++编译环境----CDT插件 Ubuntu(Linux)使用Eclipse搭建C/C++编译环境          这两天,给自己电脑弄了双系统,除了原来的W ...

  4. 批量删除ASP.NET中的缓存(cache)

    IDictionaryEnumerator em = HttpContext.Current.Cache.GetEnumerator(); while (em.MoveNext())        { ...

  5. C#-WebForm-AJAX阿贾克斯(一)基本格式

    AJAX 即" Asynchronous Javascript And XML "(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异 ...

  6. Java ThreadFactory接口用法

    根据需要创建新线程的对象.使用线程工厂就无需再手工编写对 new Thread 的调用了,从而允许应用程序使用特殊的线程子类.属性等等.   JDK中的介绍: An object that creat ...

  7. iOS开发——Localizable.strings

    这篇写的不多,但是绝对诚意满满.不会像别人一样,要不不详细,要不罗里吧嗦一堆. 1.创建Localizable.strings文件 Command+N—>iOS—>Resource—> ...

  8. STM32驱动AT24CXX系列芯片

    AT24Cxx系列EEPROM是由美国Mcrochip公司出品,1-512K位的支持I2C总线数据传送协议的串行CMOS E2PROM,可用电擦除,可编程自定时写周期(包括自动擦除时间不超过10ms, ...

  9. OpenGL ES

    前言 OpenGL ES是Khronos Group创建的一系列API中的一种(官方组织是:http://www.khronos.org/).在桌面计算机上有两套标准的 3DAPI:Direct3D和 ...

  10. vi的基本操作

    vi的基本操作 a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command m ...