关于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.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...
随机推荐
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- MongoDB学习笔记三—增删改文档上
插入insert 单条插入 > db.foo.insert({"bar":"baz"}) WriteResult({ }) 批量插入 > db.fo ...
- Linux基础介绍【第九篇】
服务器添加3块磁盘的体系结构 [root@oldboylinux test]# free -m total used free shared buffers cached M ...
- Memcached简介
在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法.其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率. 除了能够提高服务的运行效 ...
- 任意多边形切割/裁剪(附C#代码实现)
本实现主要参考了发表于2003年<软件学报>的<一个有效的多边形裁剪算法>(刘勇奎,高云,黄有群)这篇论文,所使用的理论与算法大都基于本文,对论文中部分阐述进行了详细解释,并提 ...
- ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...
- ABP框架 - 数据传输对象
文档目录 本节内容: DTO 必要性 领域层的抽象 数据隐藏 序列化和延迟加载问题 DTO 约定和验证 示例 DTO和实体间自动映射 使用特性和扩展方法进行映射 辅助接口和类 Data Transfe ...
- 解析大型.NET ERP系统 十三种界面设计模式
成熟的ERP系统的界面应该都是从模板中拷贝出来的,各类功能的界面有规律可遵循.软件界面设计模式化或是艺术性的创作,我认可前者,模式化的界面客户容易举一反三,降低学习门槛.除了一些小部分的功能界面设计特 ...
- 前端MVVM框架设计及实现
最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的Avalon开始了,我2013年写过一个关于MVC MV ...
- NotePad++中JSLint的使用
1.第一步下载Notepad++ 2.安装JSLint插件 3.运行JSlint 4.前提是你设置了当前语言或者本身文件就是js 5.JSLint的作用主要就是检查你的JS的规则正确性(至少是绝大部分 ...