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相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
随机推荐
- nginx 504 Gateway Time-out
#设定http服务器 http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型 ...
- APP打包提交审核的步骤
- Cortex-M3 跳转到指定bin执行
跳转前指定sp和msp: #if defined(__GNUC__) __attribute__(( naked )) static void set_sp(unsigned long addr) { ...
- Cache架构设计
Cache策略 定时过期策略 定时过期的好处是Cache节点的个数符合实际需求,不会造成资源滥用和服务器压力 定时过期适合访问量较大,实时性要求不高的情况 如果访问量小,定时过期会造成Cache命中率 ...
- solrJ
导入jar包 package com.tzy.solrJ; import java.io.IOException; import org.apache.solr.client.solrj.SolrSe ...
- centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目
centos7.4 实例 利用 yum 命令安装 google-chrome 超级简单(安装最新版): yum install https://dl.google.com/linux/direct/g ...
- Flask--templates-多个模板文件,视图函数如何判断查询路径
结论:以当前视图的模板为基准,查找模板文件,如果没有找到就会报错,如果需要更换模板的访问路径,可以修改__name__参数. 参考资料: https://blog.csdn.net/f70408410 ...
- [转][C#]压缩解压
{ internal static class Compressor { public static Stream Decompress(Stream source, bool bidiStream) ...
- note 4 三大结构
程序流程图 顺序结构 选择结构 if if-else if 语句-嵌套结构(Nested) 多分支结构(Chained) if score >= 90: print 'ARM' elif sco ...
- 基于CentOS搭建个人Leanote云笔记本
Leanote 依赖 MongoDB 作为数据存储,下面开始安装MongoDB: 1. 下载启动 MongoDB 下载 MongoDB 进入 /home 目录,并下载 MongoDB: cd /hom ...