SQL索引--基础理论
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL索引--基础理论相关的知识,希望对你有一定的参考价值。
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索引--基础理论的主要内容,如果未能解决你的问题,请参考以下文章