MYSQL性能优化(3)
优化数据库对象
1.优化表的数据类型
select * from tbl1 procedure analyse(16,256) ,会输出优化建议,结合情况优化
2.拆分表(仅Myisam)
2.1 纵向拆分
按照访问频率,将经常访问的字段和不常访问的字段拆分开来,经常访问的尽量定长
2.2 横向拆分
根据应用情况,将数据分为几个表,或者分到不同区中,可以避免读取与更新导致的锁问题
3 逆规范化
冗余越少 带来的联查越多,会降低效率
其实就是空间与时间的平衡
4. 使用冗余统计表
create temporary table 建的是session表,数据保存在内存,
统计的时候效率高
5.更改合适表类型
锁冲突严重,考虑使用innodb
查询多,对事务完整性不严格,考虑使用Myisam
锁问题
show status like ‘Table%’
查看表锁定争夺情况
show status like ‘innodb_row_lock%’
查看行锁争夺情况
行锁的优点:
1.多线程访问不同行
2.回滚只有少量的更改
3.可以长时间锁定单一的行
行锁的缺点:
1.比页级或者表级锁占用更多的时间
2.当操作表中的大部分数据时,需要获取更多的锁,速度慢
3.粒度太细
insert ...select ...问题
若select的表是innodb,那么会一直锁定相关行,主要是为了保证主从一致
推荐使用 select ..into outfile 和 load data infile组合来实现
next-key锁问题(下面所有的待研究)
防止'幽灵问题",会额外锁定不存在的东西
REPEATABLE READ 是 InnoDB 的默认隔离级别。
1.对 Myisam 类型的表
2) 根据应用的情况,尝试横向拆分成多个表或者改成 Myisam 分区对减少锁冲突也会
索引访问,那么即便你只是要更新其中的一行纪录,也是全表锁定的。要确保sql 是使用索引来访问纪录的,必要的时候,请使用explain 检查 sql 的执行计划,判 断是否按照预期使用了索引。
2) 由于 mysql 的行锁是针对索引加的锁, 不 是针对纪录加的锁, 所 以虽然是访问不同 行的纪录,但是如果是相同的索引键,是会被加锁的。应用设计的时候也要注意, 这里和 Oracle 有比较大的不同。
3) 当表有多个索引的时候, 不 同的事务可以使用不同的索引锁定不同的行, 当 表有主 键或者唯一索引的时候, 不 是必须使用主键或者唯一索引锁定纪录, 其 他普通索引 同样可以用来检索纪录,并只锁定符合条件的行。
4) 用 SHOW INNODB STATUS 来确定最后一个死锁的原因。查询的结果中,包括死锁的 事务的详细信息,包括执行的SQL 语句的内容,每个线程已经获得了什么锁,在等 待什么锁, 以 及最后是哪个线程被回滚。 详 细的分析死锁产生的原因, 可 以通过改 进程序有效的避免死锁的产生。
5) 如果应用并不介意死锁的出现,那么可以在应用中对发现的死锁进行处理。
6) 确定更合理的事务大小,小事务更少地倾向于冲突。
7) 如果你正使用锁定读, (SELECT ... FOR UPDATE 或 ... LOCK IN SHARE MODE),
试着用更低的隔离级别,比如 READ COMMITTED。
1) 首先要确认, 在 对表获取行锁的时候, 要 尽量的使用索引检索纪录, 如 果没有使用
8) 以固定的顺序访问你的表和行。则事务形成良好定义的查询并且没有死锁
MYSQL性能优化(3)的更多相关文章
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- Mysql性能优化三(分表、增量备份、还原)
接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...
- [MySQL性能优化系列]提高缓存命中率
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...
- [MySQL性能优化系列]巧用索引
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...
- MySQL性能优化:索引
MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...
- mysql 性能优化方向
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- MySQL性能优化总结
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- MYSQL性能优化的最佳20+条经验
MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论 131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...
- [MySQL性能优化系列]LIMIT语句优化
1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...
- mysql 性能优化方案
网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
随机推荐
- 什么是Maven项目
1.通俗理解Maven:https://blog.csdn.net/shuzhe66/article/details/45009175 个人总结: Maven项目会有pom文件! 当前的项目需要依赖其 ...
- 剑指Offer 23. 二叉搜索树的后序遍历序列 (二叉搜索树)
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 题目地址 https://www.nowcoder ...
- https://www.cnblogs.com/wuyepiaoxue/p/5661194.html
https://www.cnblogs.com/wuyepiaoxue/p/5661194.html
- ssh+key
一.ssh概述 在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输.确保了传递的数据安全. lrzsz安装包传输本地与Linux SSH客户端(ssh命令)还包含一 ...
- 【oracle入门】数据完整性约束
数据的完整性约束是对数据描述的某种约束条件,关系型数据模型中可以有三类完整性约束:实体完整性.参照完整性和用户定义的完整性. 实体完整性Entity Integrity 一个基本关系通过对应显示世界的 ...
- 转载 单例(Singleton)模式)的误区
在创建型模式中,单例(Singleton)模式和原型(Prototype)模式相对来说其用意更为简单明了.单例(Singleton)模式确保某类只有一个实例,且自行实例化并向整个系统提供这个实例:原型 ...
- 初识vue小结
初识vue 大家都那么热爱他一定有原因,我也特想了解. 我来咯, 首先用vue开发版,用一个标签在head中插入,script标签src属性引入vue文件,就像jquey一样在script,但是放在h ...
- bzoj 2460 线性基
#include<bits/stdc++.h> #define ll long long #define LL long long #define int long long using ...
- nomad 0.9 新特性
内容摘自github Affinities and Spread: Jobs may now specify affinities towards certain node attributes. A ...
- Getting Visual Studio version of a Solution file
VS 6.0 -> 6.0 VS 2002 -> 7.0 VS 2003 -> 8.0 VS 2005 -> 9.0 VS 2008 -> 10.0 VS 2010 -& ...