1、慢查询基础:优化数据访问
对于低效率查询,我们可以通过以下两个步骤来分析总是有效的:
1、确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,当时有时候也可能访问了太多的列
2、确认Mysql服务器层是否在分析大量超过需要的数据行
1.1 是否向数据库请求了不需要的数据
典型案例
查询不需要的记录
在查询时,Mysql会先返回全部结果集再进行计算,客户端应用程序会接收全部的结果集数据,然后抛弃其中大部分数据。最简单有效的解决办法在查询后面加上limit
多表关联返回所有列
总是取出全部列
重复查询相同数据
比较好的解决办法是将这个数据缓存起来,需要的时候从缓存中取
1.2 Mysql是否在扫描额外的记录
对于Mysql,最简单衡量查询开销的三个指标是:
响应时间
扫描的行数
返回的行数
一般Mysql能够使用如下三种方式应用where条件,从好到坏一次为:
1、在索引中使用where条件来过滤不匹配记录。这是在存储引擎层完成。
2、使用索引覆盖扫描(在Extra列中出现Using index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果。这是在Mysql服务器层完成的,但无需再过滤表的查询记录
3、从数据表中返回数据,然后过滤不满足条件的记录(在Extra列出现Using where)。这在Mysql服务器层完成,Mysql需要先从数据表中读出记录然后过滤
2、重构查询的方式
如果有机会尽量分解关联查询,这样做的好处:
1、让缓存效率更高
2、执行单个查询时减少了锁的竞争
3、在应用层做关联,可以容易对数据库进行拆分,更容易做到高性能扩展
4、减少冗余记录查询
Mysql的存储引擎包括:Myisam、InnoDB、BDB、Memory、Merge、Example、NDB Cluster、CSV等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
下面介绍几种常用的存储引擎:
1、Myisam:默认的Mysql插件式存储引擎,他是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一
2、InnoDB:用于事务处理应用程序,具有众多特性,包括ACID特性。
3、Memory:将所有的数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可以提供极快的访问
4、Merge:允许Mysql DBA或开发人员将一系列等同的Myisam表以逻辑方式组合在一起,并作为1个对象引用他们。对于数据仓储等环境十分适合
选择合适的数据类型
1、固定长度数据列char和可变长度数据列varchar
对于InnoDB存储引擎,内部的行存储格式没有区分固定长度和可变长度列(所有的数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度不一定比可变长度简单,建议使用varchar。他们的存储差别如下:

如果Mysql运行在严格模式,超过列的长度值不保存,并且会出现错误。
2、text和blob
blob和text值在执行了大量的删除或更新操作的时候,删除这种值会在数据表中留下很大的空洞,为了提高性能,建议定期使用optimize table功能对这类表进行碎片整理。
合成的散列索引对于那些blob或text数据列特别有用。用散列标识符值查找的速度比搜索blob列本身的速度快很多。
在不必要的时候避免检索大型的blob或text值
把blob或text列分离到单独的表中
索引的设计和使用
设计索引的原则
1、搜索的索引列不一定是索要选择的列。也就是说,最适合索引的列是出现在where字句中的列,或连接字句中指定的列,而不是select关键字后的选择列表中的列
2、使用唯一索引。
3、使用短索引。如果对串列进行索引,应该指定一个前缀长度,例如:如果一个char(200)的列,如果在前10个或20个字符内,多数值是唯一的,那么就不要对整个列进行索引,这样可以节省内存。
4、利用最左前缀。
5、不要过度索引
6、考虑在列上进行比较类型。索引可用于<,<=,=,>=,>,between

深入浅出Mysql(一)相关推荐

  1. 《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》一一第 1 章  MySQL的安装与配置...

    第 1 章 MySQL的安装与配置 深入浅出MySQL:数据库开发.优化与管理维护(第2版) 近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应 ...

  2. 深入浅出MySQL事务处理和锁机制

    深入浅出MySQL事务处理和锁机制 2015-01-13 架构师之旅 1. 事务处理和并发性 1.1. 基础知识和相关概念 1 )全部的表类型都可以使用锁,但是只有 InnoDB 和 BDB 才有内置 ...

  3. 《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》一一1.2 MySQL的安装...

    本节书摘来自异步社区出版社<深入浅出MySQL:数据库开发.优化与管理维护(第2版)>一书中的第1章,第1.2节,作者: 唐汉明 , 翟振兴 , 关宝军 , 王洪权 , 黄潇,更多章节内容 ...

  4. 深入浅出MySQL出版了

    经过近一年的写作,我们的新书,也是大家的第一本书<<深入浅出MySQL>>终于出版了,近期已经在全国上市,下面是图示的封面: 还有程序员杂志做的宣传: 从china-pub前两 ...

  5. 读《深入浅出MySQL数据库开发、优化与管理维护(第2版)》笔记2 WITH ROLLUP关键字

    读<深入浅出MySQL数据库开发.优化与管理维护(第2版)>笔记2 WITH ROLLUP关键字 WITH ROLLUP是可选语法,表名是否对分类聚合后的结果进行再汇总; 我自己的使用实例 ...

  6. [深入浅出]MySQL安全规范

    [深入浅出]MySQL安全规范 一.Mysql服务器安全规范 1. 禁止应用直连DB,一般通过代理访问. 2. 禁止DB公网访问. 3. 禁止生产和办公互通,需生产环境和办公环境隔离. 4. Linu ...

  7. 深入浅出Mysql - 优化篇(锁)

    深入浅出Mysql - 优化篇(锁) 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保 ...

  8. 深入浅出Mysql - 基础篇(列类型/运算符/函数)

    深入浅出Mysql - 基础篇(列类型/运算符/函数) 每一个常量.变量和参数都有数据类型,它用来指定一定的存储格式.约束和有效范围.MySQL提供了多种数据类型,主要包括数值型.字符串类型.日期和时 ...

  9. mysql 优先队列_深入浅出 MySQL 优先队列(你一定会踩到的order by limit 问题)

    英语和算法是程序员的两条腿 本文适用于 MySQL 5.6 及以上版本 0.先抛问题 假设字段category无索引且有重复值,order by category 和limit组合使用的结果会和预期不 ...

  10. 《深入浅出Mysql》學習筆記--日志

    四种日志 错误日志 二进制日志 慢查询日志 查询日志 1. 错误日志(.err) 严重错误信息记录 more x.err 2. 二进制日志(binlog) 记录DDL,DML(select除外) 用于 ...

最新文章

  1. Android 设计模式:(三)装饰者模式 —— 装饰对象
  2. Leetcode 415. 字符串相加
  3. mysql 启动出错问题排查
  4. cf1009F. Dominant Indices
  5. 计算机 编程 教程 pdf,计算机专业教程-第3章编程接口介绍.pdf
  6. var arr = [] 与 var arr = new Array();
  7. WinForm 的dataGridView全选,反选
  8. 面试题1:赋值运算符函数
  9. 方差、标准差(均方差),均方误差、均方根误差
  10. 微信URL带来重大调整
  11. Android Multimedia框架总结(二十四)MediaMuxer实现手机屏幕录制成gif图
  12. Radon变换主要知识点
  13. Android OTA在线升级一(架构分析)
  14. 最近很火的人工智能ChatGPT可以实现“ 连续对话”机制
  15. 使用canvas进行图片压缩(前端图片压缩核心处理)
  16. 联手百度腾讯,恒大汽车押注智能化
  17. 都说IT行业饱和了,2023年成为程序员还有发展前景吗?
  18. 解决Ubuntu 18.04 LTS网络连接不稳定的问题
  19. 三国志群英会java,八方群英会《三国志·战略版》盟主齐聚洛阳城 2021由此起航...
  20. 华为笔记本换装linux双系统,CentOS7使用(01)--华为笔记本Win10安装双系统

热门文章

  1. 英伟达控制面板打不开的解决办法
  2. Python--随机森林模型
  3. 基于C51控制蜂鸣器
  4. VBA InStr 函数
  5. vue2 怎么用vite_vite快速入门教程
  6. tomcat设置编码为UTF-8
  7. win10任务栏怎么还原到下面_如何让你的Win10桌面变得更好看?
  8. 数据分析岗位需求分析报告
  9. PADS2007快捷键、无模命令大全
  10. iOS上架app store下载步骤