码迷,mamicode.com
首页 > 数据库 > 详细

SQL索引--基础理论

时间:2017-01-12 08:18:47      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:查询条件   分组   多列   设计原则   数据库   条件   mysql   web技术   允许   

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索引--基础理论

标签:查询条件   分组   多列   设计原则   数据库   条件   mysql   web技术   允许   

原文地址:http://www.cnblogs.com/seek-knowledge/p/6274447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!