MySQL优化(二) 优化诀窍
一、索引的使用
(1)查询要使用索引最重要的条件是查询条件中的字段建立了索引;
(2)下列几种情况可能使用到索引:
<1> 对于创建的多列索引,只要查询条件使用了最坐边的列,索引一般就会被使用;
<2> 对于使用 like 的查询,查询如果是 “%aaa” 则不会使用到索引;如果是“aaa%”,则会使用到索引;
(3)下列的表将不会使用索引:
<1> 如果条件中有 OR,即使其中有条件的列建立了索引,也不会被使用;换而言之,就是所有使用的字段都要建立索引;尽量避免使用OR,效率比较低;
<2> 对于多列索引,不是使用的第一部分,则不会使用索引;
<3> like 查询以 “%” 开头;
<4> 如果列类型是字符串,那一定要在条件中将数据使用引号引起来,否则不使用索引;也就是列是字符串类型,就一定要
<5> 如果 MySql 估计使用全表扫描要比使用索引快,则不使用索引;
(4)查看索引的使用情况
Show status like 'Handler_read%‘
Handler_read_key:这个值越高越好,表示使用索引查询使用的次数;
Handler_read_rnd_next:这个值越高,说明查询越低效;
(5)大批量插入数据(了解)
<1> 对于MyISAM:
alter table table_name disable keys; 关闭表的索引;如果在导入数据的时候不关闭就会一直在建立索引文件,使导入时间过长;导入完成之后再开启表的索引就好了;
alter table table_name enable keys; 开启表的索引
<2> 对于 Innodb:
将导入的数据按照主键排序;
set unique_checks = 0,关闭唯一性校验,否则每条数据都会检查;
set autocommit = 0,关闭自动提交;
(6)SQL语句优化的技巧
<1> 优化 Group by 语句
MySql 对所有的 group by col1, col2 进行分组查询时,默认分组之后,然后进行排序,可能会降低查询速度;
如果在查询中使用 group by ,但是用户想要避免排序造成的消耗,可以使用 order by null 来禁止排序;
即:select * from user group by age order by null;
<2> 有些情况下,可以使用连接来代替子查询。因为使用 join ,MySql不需要再内存中创建临时表。
select * from dept,employ where dept.deptno = employ.deptno; [简单方式]
select * from dept left join employ on dept.deptno = employ.deptno; [左连外接,更好]
二、存储引擎的选择
1、如何选择 mysql 的存储引擎?
MyISAM:如果对表的事务要求不高,同时是以查询和添加为主,我们考虑使用这种;比如BBS的发帖表、回复表等;
InnoDB:对事务的要求高,保存的数据都是重要数据,建议使用该存储引擎;比如订单表、账号表;
Memory:数据变化频繁,不需要入库,同时频繁的查询和修改,建议使用该存储引擎;
MyISAM的插入速度为什么高于 InnoDB?
答:MyISAM插入的时候放在表的最后,InnoDB 插入的时候会做一个适当的排序;MyISAM 不支持事务,InnoDB支持事务;
【注意】如果使用了 MyISANA 存储引擎,如果经常做删除 或 修改表的记录,要定时执行 optimize table table_name 对表进行碎片整理;否则,有可能出现删除的数据没有删掉等情况。
2、MyISAM 和 InnoDB 的区别?
(1)事务:MyISAM 不支持,InnoDB 支持;
(2)查询添加速度:MyISAM 速度快(插入时直接放在表的最后),InnoDB 速度低(插入时会做事务的校验,适当的排序);
(3)支持全文索引:MyISAM 支持,InnoDB 不支持;
(4)锁机制:MyISAM 表锁,InnoDB 行锁;
(5)外键:MyISAM 不支持外键,InnoDB支持;
3、MySQL 的配置文件
max_connections = 1000 ,一般情况设置为1000,极限是2000左右;
三、读写分离
https://www.cnblogs.com/lin3615/p/5684891.html
1 程序修改mysql操作类
可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求。
优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配
缺点:自己维护更新,增减服务器在代码处理
2 amoeba
参考官网:http://amoeba.meidusa.com/
优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案
缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活
3 mysql-proxy
参考 mysql-proxy。
优点:直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号
缺点:字符集问题,lua语言编程,还只是alpha版本,时间消耗有点高
如果你不能安装软件来解决读写分离,那可以尝试阿权的项目解决思路。
如果你可以安装软件,那amoeba是不错的,mysql-proxy不太建议,目前只有alpha版本,效率还不太理想,amoeba目前在阿里巴巴是内部项目,正在生产环境使用的。
MySQL优化(二) 优化诀窍的更多相关文章
- MySQL优化二(连接优化和缓存优化)
body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...
- mysql优化二之锁机制
mysql优化二之锁机制 mysql提供了锁机制和MVCC机制来保证并发操作的安全性,这里主要讨论锁机制, MVCC见下篇文章 mysql的锁按照锁粒度可分为行锁与表锁,按照操作类型划分可读锁和写锁 ...
- MySQL之SQL优化详解(二)
目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...
- MySQL性能优化(二):优化数据库的设计
原文:MySQL性能优化(二):优化数据库的设计 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.n ...
- MySQL优化二 缓存参数优化
数据库属于 IO密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数 ...
- MySQL查询性能优化---高性能(二)
转载地址:https://segmentfault.com/a/1190000011330649 避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列.请求多余的行和列会消耗MySql ...
- MySQL优化(二):SQL优化
一.SQL优化 1.优化SQL一般步骤 1.1 查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; Com_select:执行SELECT操作的次数,一次查询累加1.其他类似 以下 ...
- 1229【MySQL】性能优化之 Index Condition Pushdown
转自http://blog.itpub.net/22664653/viewspace-1210844/ [MySQL]性能优化之 Index Condition Pushdown2014-07-06 ...
- mysql中的优化, 简单的说了一下垂直分表, 水平分表(有几种模运算),读写分离.
一.mysql中的优化 where语句的优化 1.尽量避免在 where 子句中对字段进行表达式操作select id from uinfo_jifen where jifen/60 > 100 ...
- 理解MySQL——索引与优化
转自:理解MySQL——索引与优化 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存 ...
随机推荐
- Node.js express获取参数有三种方法
express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params ( ...
- 【ELK】之Kibana使用
GET _search { "query": { "match_all": {} } } GET _cat/indices GET elk- GET /elk- ...
- 报错:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
报错环境: CDH中集成的hive服务,启动报错,所以初始化一下元数据. 配置文件:/etc/hive/conf hive-site.xml 命令目录:/opt/cloudera/parcels/CD ...
- G1回收算法
待完善...... 参考: https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653193390&idx=2&sn= ...
- python3之time、datetime、random
UTC:协调世界时,又称世界统一时间.世界标准时间.国际协调时间.由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC. 中国属于东八区,领先世界时间8小时 time模块 time.ti ...
- django之 使用py文件操作django项目中的表
要想在一个另外的py文件中操作django,可以使用如下的代码 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE",' ...
- c++ :
(1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; XXX
- matlab-可视化图像阈值选择GUI工具
话不多说,先看图,这是导入一张图后运行的效果. 在此函数中,左图是灰度图加上colorBar后的彩色效果图,右图是二值化后的图,下面是可调节阈值的灰度直方图. 左上角的按钮是回归初始状态,右上角的按钮 ...
- Music Recommendation System with User-based and Item-based Collaborative Filtering Technique(使用基于用户及基于物品的协同过滤技术的音乐推荐系统)【更新】
摘要: 大数据催生了互联网,电子商务,也导致了信息过载.信息过载的问题可以由推荐系统来解决.推荐系统可以提供选择新产品(电影,音乐等)的建议.这篇论文介绍了一个音乐推荐系统,它会根据用户的历史行为和口 ...
- leetcode160
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...