目标:优化性能

改善性能最好的技术就是在数据库中合理地使用索引。

    索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行。

反模式:无规划的使用索引

  1、不使用索引或索引不足

  2、使用了太多的索引或一些无效的索引

    (1)大多数数据库会自动地位主键建立索引,因此额外再定义一个索引就是冗余。

这个额外的索引并无任何好处,它只会成为额外的开销。

    (2)字符串索引很大,而且也不太可能对它进行全匹配查找

    (3)使用组合索引是一个很好的选择,但是大部分创建的组合索引都是冗余或者很少使用。

组合索引的顺序也很重要:在查询条件、联合条件或者排序规则上使用索引时按照从左到右的顺序

  3、执行了一些让索引无能为力的查询

    Like、表达式,都可能使索引无效。

如何识别反模式:当出现以下情况时,可能是反模式

  1、这是我的查询语句,怎样使它更快?

  2、我在每个字段上都定义了索引,为什么它没有变的更?

  3、我听说索引会使数据库变慢,所以我不使用它。

合理使用反模式

    分离率是衡量数据库索引的一个指标。分离率越高索引效率就越高。

需要时刻关注你的数据库中索引的分离率,并且抛弃那些低效的索引。

解决方案:MENTOR你的索引

  1、Measure测量:大多数数据库都提供了一些方法来记录执行SQL查询的耗时,因此可以来定位最耗时的查询。

  2、Explain解释:测量之后,分析查询变慢的原因。

每个数据库都使用一种优化工具为每次查询选择最合适的索引,并生产分析报表,称之为“查询执行计划(QEP)”。

  3、Nominate挑选:有了查询优化工具的QEP报表,应该仔细地查找那些没有使用索引的查询操作。

  4、Test测试:创建完索引之后,需要重新测试跟踪那些查询,确认你的改动确实提升了性能。

  5、Optimize优化:索引是小型的、频繁使用的数据结构,因为很适合将他们常驻在内存中。内存操作的性能是磁盘I/O操作的好几倍。

数据库服务器允许你配置缓存所需要的系统内存大小。

  6、Rebuild重组:索引在平衡的时候其效率最高,当你更新或者删除记录时,索引就逐渐变得不平衡。 

       要想最大限度地使用索引,因此要定期对索引进行维护。

结论:了解你的数据库,了解你的查询,然后MENTOR你的索引。

SQL反模式,系列学习汇总

1SQL反模式学习笔记1 开篇

2、SQL反模式学习笔记2 乱穿马路

3、SQL反模式学习笔记3 单纯的树

4、SQL反模式学习笔记4 建立主键规范【需要ID】

5、SQL反模式学习笔记5 外键约束【不用钥匙的入口】

6、SQL反模式学习笔记6 支持可变属性【实体-属性-值】

7、SQL反模式学习笔记7 多态关联

8、SQL反模式学习笔记8 多列属性

9、SQL反模式学习笔记9 元数据分裂

10、SQL反模式学习笔记10 取整错误

11、SQL反模式学习笔记11 限定列的有效值

12、SQL反模式学习笔记12 存储图片或其他多媒体大文件

13、SQL反模式学习笔记13 使用索引

14、SQL反模式学习笔记14 关于Null值的使用

15、SQL反模式学习笔记15 分组

16、SQL反模式学习笔记16 使用随机数排序

17、SQL反模式学习笔记17 全文搜索

18、SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题

19、SQL反模式学习笔记19 使用*号,隐式的列

20、SQL反模式学习笔记20 明文密码

21、SQL反模式学习笔记21 SQL注入

22、SQL反模式学习笔记22 伪键洁癖,整理数据

SQL反模式学习笔记13 使用索引的更多相关文章

  1. SQL反模式学习笔记1 开篇

    什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. ...

  2. SQL反模式学习笔记5 外键约束【不用钥匙的入口】

    目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1.数据更新有可能和约束冲突: 2.当前的数据库设计如此灵活,以至于不支持引用完整性约束: 3.数据库为外 ...

  3. SQL反模式学习笔记3 单纯的树

    2014-10-11 在树形结构中,实例被称为节点.每个节点都有多个子节点与一个父节点. 最上层的节点叫做根(root)节点,它没有父节点. 最底层的没有子节点的节点叫做叶(leaf). 中间的节点简 ...

  4. SQL反模式学习笔记2 乱穿马路

    程序员通常使用逗号分隔的列表来避免在多对多的关系中创建交叉表, 将这种设计方式定义为一种反模式,称为“乱穿马路”. 目标:  存储多属性值,即多对一 反模式:将多个值以格式化的逗号分隔存储在一个字段中 ...

  5. SQL反模式学习笔记4 建立主键规范【需要ID】

    目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...

  6. SQL反模式学习笔记6 支持可变属性【实体-属性-值】

    目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...

  7. SQL反模式学习笔记7 多态关联

    目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_T ...

  8. SQL反模式学习笔记8 多列属性

    目标:存储多值属性 反模式:创建多个列.比如一个人具有多个电话号码.座机号码.手机号码等. 1.查询:多个列的话,查询时可能不得不用IN,或者多个OR: 2.添加.删除时确保唯一性.判断是否有值:这些 ...

  9. SQL反模式学习笔记9 元数据分裂

    目标:支持可扩展性.优化数据库的结构来提升查询的性能以及支持表的平滑扩展. 反模式:克隆表与克隆列 1.将一张很长的表拆分成多张较小的表,使用表中某一个特定的数据字段来给这些拆分出来的表命名. 2.将 ...

随机推荐

  1. vue2.0实现过滤

    vue1.0和vue2.0差别还是挺多的,之前的vue1.0还有过滤器功能,到了2.0过滤器只能通过自己编写.以下是写的一个小demo: HTML <div id="app" ...

  2. Django_modelform组件

    modelForm 组件 概念 将数据库与form 组件结合用起来的中间插件 与 form 组件的区别 form组件的难处: form 可以实现 对数据的验证以及 form 的表单标签的生成 但是她做 ...

  3. rest framework 序列化

    serializers 序列化组件 可以实现很轻松的互相转换,最常用的组件 ,用量最大的组件 源码位置 rest_framework.serializers 源码中需要用到的    rest_fram ...

  4. CF932 E. Team Work 结题报告

    CF932 E. Team Work 题意 求 \[ \sum_{i=0}^n\binom{n}{i}i^k \] 其中\(n\le 10^9,k\le 5000\),对\(mod=998244353 ...

  5. elastalert

    http://blog.51cto.com/kexiaoke/1977481 什么是? ElastAlert是一个简单的框架,用于从弹性搜索中的数据中提取异常,尖峰或其他感兴趣的模式.在Yelp,我们 ...

  6. 题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)

    https://www.luogu.org/problemnew/show/P1981 (原题链接) 显然乘法的优先级高与加法,因此碰到乘号就要优先把一连串与乘号相连的数算出,很容易想到递归.可用普通 ...

  7. 简单的实现HTTP密码验证登陆

    1.首先需要安装 httpd-tools yum install -y httpd-tools 2.安装完成后设置用户名密码,我这里用的是NGINX htpasswd -bc /mypath/ngin ...

  8. C++回顾day03---<模板>

    一:函数模板 建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数模板.凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需要在模板中定义一次 ...

  9. MySQL无法插入中文的解决方案

    本人在做数据库的连接过程中,发现无法插入中文值.原因是mysql的默认编码是latin1,只须将编码改为utf8即可. 在mysql的命令行窗口中输入 status 会出现当前的编码.在mysql的安 ...

  10. 高并发秒杀系统--Service事务管理与继承测试

    [Spring IoC的类型及应用场景]  [Spring事务使用方式] [Spring事务的特性] [Spring事务回滚的理解] [Service声明式事务的配置] 1.配置事务管理器 2.配置基 ...