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.将 ...
随机推荐
- 利用window.performance.timing进行性能分析
性能分析... window.performance.timing中相关属性语义: // .navigationStart 准备加载页面的起始时间 // .unloadEventStart 如果前一个 ...
- Magento2 常见错误 ----- 定期更新
1.静态文件有版本号,静态文件不能读取,页面无法显示.如下图: 解决方案:其实URL里的版本号对于magento来说是合法的,这是因为我们缺少了一个文件\pub\static\.htaccess:导致 ...
- Java【第十篇】集合
Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组Java 集合可分为 Set.List ...
- 20175221 2018-2019-2 《Java程序设计》第一周学习总结
20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...
- 微信小程序之 3d轮播(swiper来实现)
以前写过一篇3d轮播,就是这篇,使用的方法比较笨拙,而且代码不简洁.这次发现swiper也能实现同样的效果.故记录一下. 先看看效果: wxml: <swiper previous-margin ...
- bootstrap浅谈
学习地址:http://www.runoob.com/bootstrap/bootstrap-tutorial.html 自己练习了下 主要是使用了bootstrap中包含的class类样式,只要给相 ...
- Pandas系列(三)-缺失值处理
内容目录 1. 什么是缺失值 2. 丢弃缺失值 3. 填充缺失值 4. 替换缺失值 5. 使用其他对象填充 数据准备 import pandas as pd import numpy as np in ...
- java Ajax跨域请求COOKIE无法带上的解决办法
1.web.xml加入以下节点,,一定放在第一个filter <!--目录下所有文件可以跨域Begin--> <filter> <filter-name>CorsF ...
- npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)
什么是npm npm有两层含义.一层含义是Node的开放式模块登记和管理系统,网址为npmjs.org.另一层含义是Node默认的模块管理器,是一个命令行下的软件,用来安装和管理Node模块. npm ...
- 更改Jenkins的workspace目录
系统管理→系统设置→主目录(的右边问号下面)→高级(是不是忽略了啊\(^o^)/~)→工作空间根目录 点开后面的问号可以看见3个参数(配置路径需要的): ${JENKINS_HOME} — Jenki ...