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. Halcon相关

      1.Halcon的自我描述 Program Logic Ø Each program consists of a sequence of HALCON operators Ø The progra ...

  2. Cow Rectangles

    Cow Rectangles 题目描述 The locations of Farmer John's N cows (1 <= N <= 500) are described by dis ...

  3. Linux建立信任主机

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.先在本机上面装一个sshpass 的安装包 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2.ssh-ke ...

  4. Android SDK开发包国内下载地址(转)

    想了解Android 应用开发,但可恨开发环境安装就困难重重,这里找到一个国内下载地址,特转来记录 Android SDK开发包国内下载地址

  5. SpringMVC和mybatis的框架

    1.首先以一个项目做例子,该项目用到的框架即为SpringMVC+mybatis,项目环境为MyEclipse+sqlserver+tomcat6,项目的地址(项目+数据库备份文件)大家可以上我的百度 ...

  6. C# DateTime简单的定时器用法

    DateTime是C#中的时间类,有公共索引器Now可以获取当前时间. 如果制作简单定时器的话,可以这样: 初始化:DateTime lasttime=DateTime.Now; TimeSpan t ...

  7. Mysql mysql lost connection to server during query 问题解决方法

    在linux上新安装的mysql数据库远程连接速度很慢,用Navicate可以正常连接但是时间很长:使用toad连接提示Mysql mysql lost connection to server du ...

  8. 试水mongodb er

    1)data ready var a = {"name":"zhekou","CharDate":"2015-12-01" ...

  9. 了解HTML/HTML5中的download属性

    一.download属性是个什么鬼? 首先看下面这种截图: 如果我们想实现点击上面的下载按钮下载一张图片,你会如何实现? 我们可能会想到一个最简单的方法,就是直接按钮a标签链接一张图片,类似下面这样: ...

  10. Splay初步【bzoj1503】

    做了一道水题,把bzoj1503用Splay重新写了一下. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i ...