深入浅出Mysql(一)
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(一)相关推荐
- 《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》一一第 1 章 MySQL的安装与配置...
第 1 章 MySQL的安装与配置 深入浅出MySQL:数据库开发.优化与管理维护(第2版) 近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应 ...
- 深入浅出MySQL事务处理和锁机制
深入浅出MySQL事务处理和锁机制 2015-01-13 架构师之旅 1. 事务处理和并发性 1.1. 基础知识和相关概念 1 )全部的表类型都可以使用锁,但是只有 InnoDB 和 BDB 才有内置 ...
- 《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》一一1.2 MySQL的安装...
本节书摘来自异步社区出版社<深入浅出MySQL:数据库开发.优化与管理维护(第2版)>一书中的第1章,第1.2节,作者: 唐汉明 , 翟振兴 , 关宝军 , 王洪权 , 黄潇,更多章节内容 ...
- 深入浅出MySQL出版了
经过近一年的写作,我们的新书,也是大家的第一本书<<深入浅出MySQL>>终于出版了,近期已经在全国上市,下面是图示的封面: 还有程序员杂志做的宣传: 从china-pub前两 ...
- 读《深入浅出MySQL数据库开发、优化与管理维护(第2版)》笔记2 WITH ROLLUP关键字
读<深入浅出MySQL数据库开发.优化与管理维护(第2版)>笔记2 WITH ROLLUP关键字 WITH ROLLUP是可选语法,表名是否对分类聚合后的结果进行再汇总; 我自己的使用实例 ...
- [深入浅出]MySQL安全规范
[深入浅出]MySQL安全规范 一.Mysql服务器安全规范 1. 禁止应用直连DB,一般通过代理访问. 2. 禁止DB公网访问. 3. 禁止生产和办公互通,需生产环境和办公环境隔离. 4. Linu ...
- 深入浅出Mysql - 优化篇(锁)
深入浅出Mysql - 优化篇(锁) 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保 ...
- 深入浅出Mysql - 基础篇(列类型/运算符/函数)
深入浅出Mysql - 基础篇(列类型/运算符/函数) 每一个常量.变量和参数都有数据类型,它用来指定一定的存储格式.约束和有效范围.MySQL提供了多种数据类型,主要包括数值型.字符串类型.日期和时 ...
- mysql 优先队列_深入浅出 MySQL 优先队列(你一定会踩到的order by limit 问题)
英语和算法是程序员的两条腿 本文适用于 MySQL 5.6 及以上版本 0.先抛问题 假设字段category无索引且有重复值,order by category 和limit组合使用的结果会和预期不 ...
- 《深入浅出Mysql》學習筆記--日志
四种日志 错误日志 二进制日志 慢查询日志 查询日志 1. 错误日志(.err) 严重错误信息记录 more x.err 2. 二进制日志(binlog) 记录DDL,DML(select除外) 用于 ...
最新文章
- Android 设计模式:(三)装饰者模式 —— 装饰对象
- Leetcode 415. 字符串相加
- mysql 启动出错问题排查
- cf1009F. Dominant Indices
- 计算机 编程 教程 pdf,计算机专业教程-第3章编程接口介绍.pdf
- var arr = [] 与 var arr = new Array();
- WinForm 的dataGridView全选,反选
- 面试题1:赋值运算符函数
- 方差、标准差(均方差),均方误差、均方根误差
- 微信URL带来重大调整
- Android Multimedia框架总结(二十四)MediaMuxer实现手机屏幕录制成gif图
- Radon变换主要知识点
- Android OTA在线升级一(架构分析)
- 最近很火的人工智能ChatGPT可以实现“ 连续对话”机制
- 使用canvas进行图片压缩(前端图片压缩核心处理)
- 联手百度腾讯,恒大汽车押注智能化
- 都说IT行业饱和了,2023年成为程序员还有发展前景吗?
- 解决Ubuntu 18.04 LTS网络连接不稳定的问题
- 三国志群英会java,八方群英会《三国志·战略版》盟主齐聚洛阳城 2021由此起航...
- 华为笔记本换装linux双系统,CentOS7使用(01)--华为笔记本Win10安装双系统