mysql索引设计原则

索引设计原则

  • 选择唯?一性索引

    • 唯?一性索引的值是唯?一的,可以更更快速的通过该索引来确定某条记录
  • 为常作为查询条件的字段建?立索引
    • 如果某个字段经常?用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因
      此,为这样的字段建?立索引,可以提?高整个表的查询速度
  • 限制索引的数?目
    • 索引的数?目不不是越多越好
    • 每个索引都需要占?用磁盘空间,索引越多,需要的磁盘空间就越?大
    • 修改表时,对索引的重构和更更新很麻烦
    • 越多的索引,会使更更新表变得很浪费时间
  • 尽量量使?用数据量量少的索引
    • 如果索引的值很?长,那么查询的速度会受到影响

      • 例如:对?一个char(100)类型的字段进?行行全?文检索需要的时间肯定?比对char(10)类型的字
        段需要的时间更更多
  • 为经常需要排序、分组和联合操作的字段建?立索引
    • 经常需要order by、group by、distinct和union等操作的字段,排序操作会浪费很多时间。
      如果为其建?立索引,可以有效的避免排序操作
  • 尽量量使?用前缀索引
    • 如果索引字段的值很?长,最好使?用值的前缀来索引

      • 例如:text和blog类型的字段,进?行行全?文检索会浪费时间。如果只检索字段的前?面的若
        干个字符,这样可以提?高检索速度
  • 删除不再使?用或者很少使?用的索引
    • 表中数据被?大量量更更新,或者数据的使?用?方式被改变后,原有的?一些索引可能不不再需要。数据
      库管理理员应当定期找出这些索引,将他们删除,从?而减少索引对更更新操作的影响
  • 小表不不应建议索引(超过200w数据的表,建?立索引)
    包含?大量量的列列并且不不需要搜索?非空值的时候可以考虑不不建索引
  • 经常被?用来过滤记录的字段
    primary key 字段,系统?自动创建主键的索引
    unique key 字段,系统?自动创建对应的索引
    foreign key 约束所定义的作为外键的字段
    在查询中?用来连接表的字段
    经常?用来作为排序(order by的字段)基准的字段
    索引会占?用磁盘空间,创建不不必要的索引只会形成浪费
    索引的创建必须考虑数据的操作?方式
    内容很少变动,经常被查询,为它多创建?几个索引?无所谓
    经常性,例例?行行性变动的表?而?言,则需要谨慎地创建确实必要的索引
    复合索引和单?一索引
    复合索引是指多字段联合索引,查询时经常需要这?几个字段组合?一起为条件再查询
    唯?一索引主要是?用主键ID索引,存储的结构顺序与物流结构?一直
    添加和删除索引的情况
    表的主键、外键必须有索引
    数据量量超过300w的表应该有索引
    经常与其他表进?行行连接的表,在连接字段上应该建?立索引
    经常出现在where?子句句中的字段,特别是?大表的字段,应该建?立索引;
    索引应该建?立选择性?高的字段上;
    索引应该建在?小字段上,对于?大的?文本字段甚?至超?长字段,不不要建索引;
    复合索引的建?立需要进?行行仔细分析;尽量量考虑?用单字段索引代替:
    正确选择复合索引中主列列字段,?一般是选择性较好的字段
    复合索引的?几个字段是否经常同时以AND?方式出现在where?子句句中?单字段查询是否极
    少甚?至没有?
    如果是,则可以建?立复合索引;否则考虑单字段索引;
    如果复合索引中包含的字段经常单独出现在where?子句句中,则分解为多个单字段索
    引?
    如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字
    段;
    如果既有单字段索引,?又有这?几个字段是哪个的复合索引,?一般可以删除复合索
    引;
    频繁进?行行数据操作的表,不不要建?立太多的索引
    删除?无?用的索引,避免对执?行行计划造成负?面影响

原文地址:https://www.cnblogs.com/oklizz/p/12076519.html

时间: 2024-07-31 12:51:50

mysql索引设计原则的相关文章

MySQL索引设计需要考虑哪些因素?

索引小知识 篇幅有限,索引的基本知识我们就不赘述了,在此,我们尝试说明其中的一个小点-----B+树与B树的区别到底是什么. InnoDB是使用B+树来实现其索引功能的.在B+树中,内节点(非叶子节点)存储了行数据的键,而叶子节点存储了所有的行数据,而B树的每个节点都存储了真实的数据.这种数据结构,决定了两者有以下不同点: (1)非叶子节点能存放指针的数据量.因为B树的非叶子节点存放的是整行的数据,占用了较多的空间,所以能存放指针就相对较少,因此整个B树的层数就变高.当数据量比较大时,插入更新会

深入浅出分析MySQL索引设计背后的数据结构

在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从而可以帮你释疑如下问题: 1.为什么innodb表需要主键? 2.为什么建议innodb表主键是单调递增? 3.为什么不建议innodb表主键设置过长? B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.B通常

MySQL 索引设计概要

在关系型数据库中设计索引其实并不是复杂的事情,很多开发者都觉得设计索引能够提升数据库的性能,相关的知识一定非常复杂. 然而这种想法是不正确的,索引其实并不是一个多么高深莫测的东西,只要我们掌握一定的方法,理解索引的实现就能在不需要 DBA 的情况下设计出高效的索引. 本文会介绍 数据库索引设计与优化 中设计索引的一些方法,让各位读者能够快速的在现有的工程中设计出合适的索引. 磁盘 IO 一个数据库必须保证其中存储的所有数据都是可以随时读写的,同时因为 MySQL 中所有的数据其实都是以文件的形式

MySQL 索引优化原则

一.索引优化原则 1.最左前缀匹配原则,联合索引,mysql会从做向右匹配直到遇到范围查询(>.<.between.like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整. 2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优

B+树|MYSQL索引使用原则

MYSQL一直了解得都不多,之前写sql准备提交生产环境之前的时候,老员工帮我检查了下sql,让修改了一下存储引擎,当时我使用的是Myisam,后面改成InnoDB了.为什么要改成这样,之前都没有听过存储引擎,于是网上查了一下. 事实上使用不同的存储引擎也是有很大区别的,下面猿友们可以了解一下. 一.存储引擎的比较 注:上面提到的B树索引并没有指出是B-Tree和B+Tree索引,但是B-树和B+树的定义是有区别的. 在 MySQL 中,主要有四种类型的索引,分别为: B-Tree 索引, Ha

mysql索引建立原则

看了网上一些网上关于创建索引的原则,在这里做一下总结: 1.尽量创建在使用频率较高的字段上,比如主键,外键,where总用到的字段,join是相关联的字段 2.如果表过大,一定要创建索引. 3.索引应该尽量建在一些长度比较小的字段上,减少索引查询时间 4.删除不用的,或很少使用的索引 5.欢迎补充 原文地址:https://www.cnblogs.com/duodushuduokanbao/p/9629745.html

设计Mysql索引的原则

1. 搜索的索引列,不一定是所要选择的列.换句话说,最适合索引的列是出现在WHERE 子句中的列,或连接子句中指定的列,而不是出现在SELECT 关键字后的选择列表中的列. 2. 使用惟一索引.考虑某列中值的分布.对于惟一值的列,索引的效果最好,而具有多个重复值的列,其索引效果最差.例如,存放年龄的列具有不同值,很容易区分各行.而用来记录性别的列,只含有" M"和"F",则对此列进行索引没有多大用处(不管搜索哪个值,都会得出大约一半的行) 3. 使用短索引.如果对串

索引设计原则

1.最左前缀原则 index column_name(10) 只对前十个字节做索引 ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes mysql> alter table e engine=myisam; ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes 所有索引列长度加起来不能>1000

MySQL索引设计一些策略

前言 索引加快了检索的速度,但是却降低了数据列里插入.删除以及修改数值的速度.也就是说,索引降低了许多涉及写入的操作速度.之所以出现这种情况,是由于写入一条数据不仅仅是要写入到数据行,还需要所有的索引都作出相应的改变如更新或是重新编排.MySQL在为检索生成一个执行方案时候,要仔细对索引进行计算,创建过多的索引对查询优化程序就加上了更多的工作,而且当你有太多的索引的时候,MySQL还有可能无法选出最好的索引来使用.于是在选择索引的时候,需要采取一些策略. 策略1 在选择索引列的时候,尽量为用搜索