关于MySQL数据库优化的部分整理
在之前我写过一篇关于这个方面的文章
《【原创】为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)》
这次,主要侧重点讲下两种常用存储引擎。
我们一般从两个方面进行MySQL数据库优化:
A、SQL语句的优化。
这点,需要我们在写SQL的时候要特别注意,在建表的时候也非常注意。
1 尽量不要在列上进行运算,这样会导致索引失效。
2 使用JOIN时候,应使用小结果集驱动大结果集。把复杂的JOIN拆分成多个QUERY。在多JOIN的时候,最容易导致锁表和堵塞。
3 在使用LIKE进行模糊查询时候,避免使用%%。这样即使有索引的情况下,索引也会失效。
如:
SELECT * FROM TABLENAME WHERE name LIKE '%wang%'
需要进行优化:
SELECT * FROM TABLENAME WHERE name >= 'wang' AND name < 'wanh'
这样,将会使用到索引。前提是你对列name添加了索引。
4 仅列出查询的字段,这样节省内存。如果字段不是很多的话,也可以使用 *
5 使用批量插入语句节省交互。
6 limit基数较大的时候,用BETWEEN。如
SELECT * FROM TABLENAME LIMIT 100000,10
优化下
SELECT * FROM TABLENAME BETWEEN 100000,100010
但是,用BETWEEN有个问题,如果中间有删除的,则数据肯定少
7 获取多条随机记录的时候,不要使用rand()。可以用PHP产生随机数,然后使用IN
8 避免使用NULL。
9 不要使用COUNT(id),使用COUNT(*)
10 尽量在索引中完成相关排序工作
在关键字段上,值得是出现在WHERE列中的,建不建索引差别很大。查询速度相差近100倍
并不是建了索引就有用,差的索引反而会导致查询速度下降
索引不是越多越好,MySQL维护索引需要成本
B 服务器相关优化
1 选择存储引擎
是选择MYISAM还是 InnoDB,取决于你的实际情况。
先了解下这两个的区别:MYSIAM表级锁。没有事务机制。快读。INNODB支持事务,行级锁。INNODB是行级锁,相对表级锁会带来较大的消耗。但是在系统并发量较大的情况下,性能高于MySIAM。INNODB的索引不仅缓存索引本身还缓存数据。
INNODB需要更多的内存支持。不过,现在硬件的投入都是比较廉价的。
在这个地方需要了解个 R/W 读写比。show global status 查看 Com_select 表示SELECT语句执行的次数,Com_insert表示INSERT语句执行的次数。通过计算读类型和写类型的语句比例。我们大概得到个读写比例。
理想的情况是100:1,当R/W 小于 10:1的时候,认为是写为主。一般而言,这个值是30:1
我们给出个存储引擎选择的原则:
1 采用MyISAM
a R/W > 100:1且UPDATE较少
b 并发不高不需要事务
c 表数据量较小
d 硬件资源有限 如内存小
2 采用INNODB
a R/w < 20:1 OR < 10:1 且update频繁
b 表数据量较大,1000万左右的 并发较大的
c 安全性和可用性较高。如 事务机制
关于MySQL数据库优化的部分整理的更多相关文章
- 中国移动MySQL数据库优化最佳实践
原创 2016-08-12 章颖 DBAplus社群 本文根据DBAplus社群第69期线上分享整理而成,文末还有书送哦~ 讲师介绍章颖 数据研发工程师 现任中国移动杭州研发中心数据研发工程师,擅长M ...
- MySQL数据库优化、设计与高级应用
MySQL数据库优化主要涉及两个方面,一方面是对SQL语句优化,另一方面是对数据库服务器和数据库配置的优化. 数据库优化 SQL语句优化 为了更好的看到SQL语句执行效率的差异,建议创建几个结构复杂的 ...
- 【MySQL】花10分钟阅读下MySQL数据库优化总结
1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 50多条mysql数据库优化建议
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...
- 解开发者之痛:中国移动MySQL数据库优化最佳实践(转)
开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则 ...
- 30多条mysql数据库优化方法【转】
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 百万行mysql数据库优化和10G大文件上传方案
百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...
- 从运维角度来分析mysql数据库优化的一些关键点【转】
概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...
随机推荐
- iOS开发--ChildViewController实现订单页的切换
先不说废话, 上效果图, 代码量也不大, 也不上传github骗星星了, 你们复制粘贴下代码, 就可以轻而易举的弄出一个小demo. 这个代码的实现并不复杂, 甚至于说非常简单, 就是逻辑有点小绕, ...
- maven的pom.xml关系依赖书写顺序
今天遇到了一个情况,以前代码编译没有问题,升级了hbase客户端phoenix驱动,又调整了thrift的关系依赖的位置,放到了这个驱动后面. 如下: 导致了一个thrift接口类编译报错: 检查这个 ...
- mysql 5.7中的用户权限分配相关解读!
这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序
在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...
- ABP框架 - 介绍
文档目录 本节内容: 简介 一个快速示例 其它特性 启动模板 如何使用 简介 我们总是对不同的需求开发不同的应用.但至少在某些层面上,一次又一次地重复实现通用的和类似的功能.如:授权,验证,异常处理, ...
- C#经典笔试题-获取字符串中相同的字符以及其个数
public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...
- Atitit MATLAB 图像处理attilax总结
Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...
- WCF学习之旅—请求与答复模式和单向模式(十九)
一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...
- Grunt(页面静态引入的文件地址的改变探究)-V2.0
相关插件的引用: grunt-usemin 对页面的操作 grunt-contrib-cssmin 压缩css load-grunt-tasks 瘦身gruntfile grunt-rev给md5 ...