`
静妙仙人
  • 浏览: 84175 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

创建索引的原则

阅读更多

索引可以提高数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间。所以是否要为表增加索引、索引建立在那些字段上,是创建索引前必须要考虑的问题。解决此问题就是分析应用程序的业务处理、数据使用,为经常被用作查询条件、或者被要求排序的字段建立索引。

索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引

一般选择在这样的列上创建索引:

1.    在经常需要搜索查询的列上创建索引,可以加快搜索的速度;

2.    在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构;

3.    在经常用在连接的列上创建索引,这些列主要是一些外键,可以加快连接的速度;

4.    在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

5.    在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询 时间;

6.    在经常使用在Where子句中的列上面创建索引,加快条件的判断速度;

7.    为经常出现在关键字order bygroup bydistinct后面的字段,建立索引。

 一般不选择具有这些特点的列上创建索引:

1.    对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查 询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求;

2.    不要在有大量相同取值的字段上,建立索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加 快检索速度;

3.    对于那些定义为text, imagebit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少;

4.    当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

创建索引需要注意的地方:

1.    限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作

2.    避免在取值朝一个方向增长的字段(例如:日期类型的字段)上,建立索引;对复合索引,避免将这种类型的字段放置在最前面。由于字段的取值总是朝一个方向增长,新记录总是存放在索引的最后一个叶页中,从而不断地引起该叶页的访问竞争、新叶页的分配、中间分支页的拆分。此外,如果所建索引是聚集索引,表中数据按照索引的排列顺序存放,所有的插入操作都集中在最后一个数据页上进行,从而引起插入“热点”。

3.    对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用。因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。

4.    删除不再使用,或者很少被使用的索引。表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再被需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。

5
1
分享到:
评论

相关推荐

    数据库 创建索引 sql oracle

    1.索引的创建与使用 2.创建索引的原则 3.索引的分类 4.创建索引的多种方法 5.管理索引 6.索引优化 7.查看、修改索引属性 8.修改索引名 9.删除索引

    Oracle 创建索引的基本规则

    Oracle 创建索引的基本规则,好好研究一下有好处.

    MySQL组合索引与最左匹配原则详解

    为什么不对没一列创建索引 减少开销 覆盖索引 效率高 减少开销:假如对col1、col2、col3创建组合索引,相当于创建了(col1)、(col1,col2)、(col1,col2,col3)3个索引 覆盖索引:假如查询SELECT col1, col2...

    第08章_索引的创建与设计原则.pdf

    第08章_索引的创建与设计原则.pdf

    SQL 如何建立索引来加快数据库的查询

    创建索引5.1. 自动创建索引5.2. 手动创建索引5.2.1. 创建表时创建索引5.2.2. 在已经存在的表上创建索引5.2.2.1. alter语句创建索引5.2.2.2. create语句创建索引6. 查看索引6.1. explain关键字查看索引6.2. show ...

    浅谈mysql的索引设计原则以及常见索引的区别

    为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。 那么索引设计原则又是怎样的? 1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。...

    MySQL索引不会被用到的情况汇总

    1.创建索引 代码如下: CREATE INDEX indexName ON mytable(username(length)); 如果是 CHAR,VARCHAR 类型,length 可以小于字段实际长度;如果是 BLOB 和 TEXT 类型,必须指定 length,下同。 2.修改表结构 代码如

    数据库 索引

    1.2 创建索引的优点 (1)创建唯一性索引,保证数据库表中每一行数据的唯一性。 (2)加快数据的检索速度,这也是创建索引的最主要的原因。 (3)减少磁盘IO(向字典一样可以直接定位)。 (4)通过使用索引,可以在...

    简单了解添加mysql索引的3条原则

    一,索引的重要性 索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达一个...

    mysql索引优化分享

    关于mysql索引一些优化介绍与创建原则,还有对order by排序的算法的介绍等等

    SQL Server系统调优解决方案

    索引键:用于创建索引的列。 索引类型  聚集索引: 聚集索引基于数据行的键值在表内排序和存储这些数据行。由于数据行按基于聚集索引键的排序次序存储,因此聚集索引对查找行很有效。每个表只能有一个聚集索引,...

    Mysql面试过关!(详解:索引+常用引擎+常见问题+sql调优)

    3.6 查询条件使用or关键字,其中一个字段没有创建索引,则会导致整个查询语句索引失效; or两边为“>”和“<”范围查询时,索引失效 3.7 两列数据做比较,即便两列都创建了索引,索引也会失效 3.8 查询条件使用不等...

    关于MySQL面试题中有关索引的九大难点全在这里了

    数据结构维度 oB+树索引:所有数据存储在...o联合索引:多个字段创建的索引,使用时遵循最左前缀原则。 o唯一索引:索引列中的值必须是唯一的,但是允许为空值。 空间索引:MySQL5.7之后支持空间索引,在空间索引这方面

    MySQL数据库面试题(2020最新版)

    文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限...创建索引的原则(重中之重)创建索引的三种方式,删除索引创建索引时需要注意什么?使用索引查询一定能提高查询

    C++编程思想,用简单的例子和简练的叙述讲解C++编程,别具特色。

    2.3 放在一起:项目创建工具 29 2.4 什么是非正常 29 2.5 基本对象 30 2.6 什么是对象 34 2.7 抽象数据类型 35 2.8 对象细节 35 2.9 头文件形式 36 2.10 嵌套结构 37 2.11 小结 41 2.12 练习 41 第3章 隐藏实现 42 ...

    MySql数据库索引详解,索引看这一篇就够了

    3 索引的创建和删除 4 索引的执行过程 5 索引的底层实现原理 6 主键索引,辅助索引,聚集索引,非聚集索引 6.1 MyISAM存储引擎-主键索引 6.2 MyISAM存储引擎-辅助索引 6.3 InnoDB存储引擎-主键索引 6.4 InnoDB存储...

    2022年MySQL最新面试题,很全,已拿大厂 offer

    3、创建索引的原则是什么?(重中之重) 4、使用索引查询一定能提高查询的性能吗?为什么 5、索引有哪些优缺点? 6、讲一讲聚簇索引与非聚簇索引? 7、百万级别或以上的数据如何删除 8、什么是最左前缀原则?什么是最...

    深入浅析Mysql联合索引最左匹配原则

    在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例: 对列col1、列col2和列col3建一个联合索引 KEY test_col1_col2_col3 on test(col1,col2,col3); 联合...

    mysql索引原理深入解析

    不生产资源,只是资源的搬运工,如有侵权,请及时联系,谢谢! 目录: 一、 索引是什么? 二、 索引存储模型推演 三. B+Tree 落地形式 四、 索引使用原则 五. 索引的创建与使用

    MySQL只学有用的–MYSQL索引原理及创建技巧

    二叉树聊一聊InnoDB的索引模型(B+树)索引的维护(《新华字典》的目录修改)SQL索引执行过程–回表索引创建技巧–索引覆盖索引创建技巧—最左前缀原则索引下推小结引用交个朋友好吗? 索引的基础理解 索引是数据库...

Global site tag (gtag.js) - Google Analytics