SQL反模式学习笔记13 使用索引
目标:优化性能
改善性能最好的技术就是在数据库中合理地使用索引。
索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行。
反模式:无规划的使用索引
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反模式,系列学习汇总
18、SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
SQL反模式学习笔记13 使用索引的更多相关文章
- SQL反模式学习笔记1 开篇
什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. ...
- SQL反模式学习笔记5 外键约束【不用钥匙的入口】
目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1.数据更新有可能和约束冲突: 2.当前的数据库设计如此灵活,以至于不支持引用完整性约束: 3.数据库为外 ...
- SQL反模式学习笔记3 单纯的树
2014-10-11 在树形结构中,实例被称为节点.每个节点都有多个子节点与一个父节点. 最上层的节点叫做根(root)节点,它没有父节点. 最底层的没有子节点的节点叫做叶(leaf). 中间的节点简 ...
- SQL反模式学习笔记2 乱穿马路
程序员通常使用逗号分隔的列表来避免在多对多的关系中创建交叉表, 将这种设计方式定义为一种反模式,称为“乱穿马路”. 目标: 存储多属性值,即多对一 反模式:将多个值以格式化的逗号分隔存储在一个字段中 ...
- SQL反模式学习笔记4 建立主键规范【需要ID】
目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...
- SQL反模式学习笔记6 支持可变属性【实体-属性-值】
目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...
- SQL反模式学习笔记7 多态关联
目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_T ...
- SQL反模式学习笔记8 多列属性
目标:存储多值属性 反模式:创建多个列.比如一个人具有多个电话号码.座机号码.手机号码等. 1.查询:多个列的话,查询时可能不得不用IN,或者多个OR: 2.添加.删除时确保唯一性.判断是否有值:这些 ...
- SQL反模式学习笔记9 元数据分裂
目标:支持可扩展性.优化数据库的结构来提升查询的性能以及支持表的平滑扩展. 反模式:克隆表与克隆列 1.将一张很长的表拆分成多张较小的表,使用表中某一个特定的数据字段来给这些拆分出来的表命名. 2.将 ...
随机推荐
- mongoDB 数据库简介
背景概念-数据库类型 对比关系型数据库 优点 : 逻辑清晰.容易理解,结构类似表格 使用 sql 语句技术成熟,使用方便 数据一致性好,完整性好 关系型数据库比较成熟,可以使用一些复杂操作 缺点 : ...
- min_25筛
min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...
- <Android基础>(三) UI开发 Part 2 ListView
ListView 1)ListView的简单用法 2)定制ListView界面 3)提升ListView的运行效率 4)ListView的点击事件 3.5 ListView 3.5.1 ListVie ...
- pthread_cond_wait学习笔记
pthread_cond_wait学习笔记 近期学习了线程等待和激活的相关知识. 先介绍几个api: pthread_cond_t表示多线程的条件变量,用于控制线程等待和就绪的条件. 一:条件变量的初 ...
- Java基础知识拾遗(一)
类型提升规则 Java定义了几个应用于表达式的类型提升规则:所有byte.short和char类型的值都被提升为int类型.如果有一个操作数是long类型,将这个表达式提升为 long 类型:如果有一 ...
- 第九节: 利用RemoteScheduler实现Sheduler的远程控制
一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上控制这个Scheduler. 2. 猜想: A服务器上的Scheduler需要有 ...
- 点评cat系列-应用集成
========================消息的基本属性========================消息的几个属性:type: 定义消息的 category, 比如 SQL 或 RPC 或 ...
- LaTeX 一个段落加边框
\usepackage{framed} \begin{framed} 对这里加边框啊 \end{framed}
- [物理学与PDEs]第1章习题10 自由电磁场在 Lorentz 规范变换下可使标势为零
在自由电磁场的情况, 证明: 在保持 Lorentz 条件下的规范变换下, 可使标势恒为零. 证明: 取 $\psi$ 满足 $\cfrac{\p \psi}{\p t}=\phi$ 且 $\cfra ...
- Linux中安装C++编译器codeBlock,并配置opencv链接库
1.Linux中安装codeBlock https://blog.csdn.net/xinyunyishui/article/details/50967395 2.CodeBlock中的中文显示不完全 ...