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. JAVA基础---面向对象

    方法的重载Overload: 一个类中可以定义有相同的名字, 参数不同的多个方法. 调用时, 会根据不同的参数选择对应的方法. static: 在数据区, 可以计数,属于类,不属于对象: public ...

  2. 转 Encoding is Not Encryption 编码和加密的区别

    昨天跟别人聊天的时候,别人把base64说成了加密. 我并不是扣字眼,但是做为一个IT技术人员我认为分辨加密和编码的区别算是一个常识. It's unfortunate that the words  ...

  3. IMapControl3 Interface(1) Properties属性

    IMapControl3 Interface Provides access to members that control the MapControl. Note: the IMapControl ...

  4. BNU OJ 51000 BQG's Random String

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; +; cha ...

  5. boost库之shared_ptr

    shared_ptr 编辑 目录 1简介 2作用 3历史 4概要 5用法 ▪ 删除共享对象 ▪ 标准容器 1简介编辑 shared_ptr是一种智能指针(smart pointer). 2作用编辑 s ...

  6. Unity 3d中Shader是什么,可以吃吗?

    众所周知,Unity3d是一款跨平台非常广的游戏引擎,上手容易,界面友好,集成功能众多,是目前开发手游的主流引擎.本人有幸使用Unity 3d进行开发已一年多时间,已领略了这歀引擎的强大之处. 编写s ...

  7. tt程序分析(一)

    首先是loginactivity login成功以后,跳转到mainActivity. mainActivity中有四个fragment , 聊天        fragment_chat 通讯录   ...

  8. rapidjson 使用教程

    在cocos2d-x引入了rapidjson,它处理速度比其他的json库快,反正不管了,我们这边只是学习下如何使用.rapidjson官方网址: https://code.google.com/p/ ...

  9. Android L(5.0)源码之手势识别GestureDetector

    本人新手,最近下了Android L的源码,正在研究手势识别,能力有限,现总结如下: Android识别触摸屏手势使得用户体验大大提高.在View类中有个View.OnTouchListener内部接 ...

  10. 【转】实用 .htaccess 用法大全

    这里收集的是各种实用的 .htaccess 代码片段,你能想到的用法几乎全在这里. 免责声明: 虽然将这些代码片段直接拷贝到你的 .htaccess 文件里,绝大多数情况下都是好用的,但也有极个别情况 ...