![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysq优化
andy2cloud
这个作者很懒,什么都没留下…
展开
-
MySQL调优三步曲(慢查询、explain profile)
mysql profile explain slow_query_log分析优化查询在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql性能调优过程中经常用到的三件利器:1、慢查询 (分析出现出问题的sql)2、Explain转载 2017-07-09 18:25:53 · 671 阅读 · 0 评论 -
漫画算法:什么是一致性哈希?
2017-07-18 算法爱好者(点击上方公众号,可快速关注)来源:伯乐专栏作者/玻璃猫,微信公众号 - 梦见(dreamsee321)如有好文章投稿,请点击 → 这里了解详情一年之前——转载 2017-07-20 18:43:06 · 1073 阅读 · 0 评论 -
Mysql性能优化案例-覆盖索引分享
场景产品中有一张图片表,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化表结构很简单,主要字段:复制代码代码如下:user_id 用户IDpicname 图片名称smallimg 小图名称一个用户会有多条图片记录现在有一个根据user_id建立的索引:uid查询语句也很简单:取转载 2017-07-15 12:15:32 · 487 阅读 · 0 评论 -
使用pt-query-digest分析mysql slow query log
孔子说“工欲善其事,必先利其器”, 今天就介绍一下percona toolkit中的pt-query-digest。下载地址:http://www.percona.com/software/percona-toolkit/官方文档:http://www.percona.com/doc/percona-toolkit/pt-query-digest.html转载 2017-07-15 11:33:58 · 546 阅读 · 0 评论 -
慢查询日志详解
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查转载 2017-07-15 10:35:15 · 2274 阅读 · 0 评论 -
MySQL前缀索引和索引选择性
有时候需要索引很长的字符列,这会让索引变得大且慢。通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。但这样也会降低索引的选择性。索引的选择性是指不重复的索引值(也称为基数,cardinality)和数据表的记录总数的比值,范围从1/#T到1之间。索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行。唯一索引的选择性是1,这是最好的索引选择性转载 2017-07-14 18:52:18 · 403 阅读 · 0 评论 -
如何理解并正确使用MySQL 索引
1、概述索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧。注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构2、索引的优点1、大大减轻了服务器需要扫描的数据量,从而转载 2017-07-14 18:46:02 · 299 阅读 · 0 评论 -
单机数据库优化
数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表。另外,一般大企业面试往往会从单机数据库问起,一步一步问到分库分表,中间会穿插很多数据库优化的问题。本文试图描述单机数据库优化的一些实践,数据库基于mysql,如有不合理的地方,欢迎指正。1、表结构优化转载 2017-07-13 23:58:08 · 367 阅读 · 0 评论 -
高性能MySql进化论(十二):Mysql中分区表的使用总结
当数据量非常大时(表的容量到达GB或者是TB),如果仍然采用索引的方式来优化查询,由于索引本生的消耗以及大量的索引碎片的产生,查询的过程会导致大量的随机I/O的产生,在这种场景下除非可以很好的利用覆盖索引,否则由于在查询的过程中需要根据索引回数据表查询,会导致性能受到很大的影响,这时可以考虑通过分区表的策略来提高查询的性能。 不同的数据库管理系统对分区的实现可能有所区别,本文主要以MYSQ转载 2015-11-26 19:15:38 · 293 阅读 · 0 评论 -
mysql优化(2)索引优化 配置优化
2 索引及查询优化索引的类型Ø 普通索引:这是最基本的索引类型,没唯一性之类的限制。Ø 唯一性索引:和普通索引基本相同,但所有的索引列值保持唯一性。Ø 主键:主键是一种唯一索引,但必须指定为"PRIMARY KEY"。Ø 全文索引:MYSQL从3.23.23开始支持全文索引和全文检索。在MYSQL中,全文索引的索引类型为FULLTEXT。全文索引可以转载 2016-02-25 18:32:24 · 441 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
前两天经历了武汉一行腾讯面试,数据库索引是一个面试热点,在此搜集相关资料,以备学习之用。下面是一位牛人写得关于数据库索引的精品之作,因为很好,不敢修饰,转载至此与博友共享。原文链接:MySQL索引背后的数据结构及算法原理本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据转载 2017-08-09 15:07:54 · 294 阅读 · 1 评论 -
mysql explain说明及sql优化准则
文章原文地址:https://mp.weixin.qq.com/s/q2CxOEEVGW7IYXeP_wE_wQMySQL EXPLAIN命令是查询性能优化不可缺少的一部分,本文主要讲解explain命令的使用及相关参数说明。EXPLAIN Output Columnsidid是用来顺序标识整个查询中SELELCT 语句的,在嵌套查询中id越大的语句越先执行。该值可能为NULL,如果这一行用来说明...转载 2017-07-26 22:34:33 · 358 阅读 · 0 评论 -
MySql数据库的优化-MySql中is NULL、ISNULL()和IFNULL()运行速度的比较
在查询过程中,我们经常用到非空和is null的查询,为了更高效的查询,我们应该知道那种方法更快。在上一篇中,我们已经添加了一些数据。根据这些数据我们就可以来做一些验证。第一步,is NULL要比ISNULL()的比较SELECT * from 表名 where 字段名 is NULLSELECT * from 表名 where ISNULL(字段名)由上面可以看出,is NULL要比ISNULL...转载 2018-04-27 15:51:48 · 6954 阅读 · 1 评论 -
MySQL_插入更新 ON DUPLICATE KEY UPDATE
平时我们在设计数据库表的时候总会设计 unique 或者 给表加上 primary key 的限制条件.此时 插入数据的时候 ,经常会有这样的情况:我们想向数据库插入一条记录: 若数据表中存在以相同主键的记录,我们就更新该条记录。 否则就插入一条新的记录。逻辑上我们需要怎么写:$result = mysql_query('select * from xxx where id = 1');$r...转载 2018-05-11 18:27:01 · 285 阅读 · 0 评论 -
mysql事务执行时间过长引起死锁
http://blog.csdn.net/lin_credible/article/details/8541195http://www.51testing.com/html/16/390216-838016.htmlhttp://www.jb51.net/article/32651.htm1.优化sql事务,减少事务锁的时间转载 2018-04-13 20:34:14 · 6256 阅读 · 0 评论 -
MYSQL开发性能研究——批量插入的优化措施
一、我们遇到了什么问题在标准SQL里面,我们通常会写下如下的SQL insert语句。1INSERT INTO TBL_TEST (id) VALUES(1); 很显然,在MYSQL中,这样的方式也是可行的。但是当我们需要批量插入数据的时候,这样的语句却会出现性能问题。例如说,如果有需要插入转载 2018-04-02 17:01:51 · 2052 阅读 · 0 评论 -
mysql count(*),count(1)与count(column)区别
count(*)对行的数目进行计算,包含NULLcount(column)对特定的列的值具有的行数进行计算,不包含NULL值。count()还有一种使用方式,count(1)这个用法和count(*)的结果是一样的。性能问题1.任何情况下SELECT COUNT(*) FROM tablename是最优选择;2.尽量减少SELECT COUNT(*) FROM tablename WHERE CO...转载 2018-03-22 15:39:54 · 866 阅读 · 0 评论 -
MySQL事务隔离级别详解
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirt转载 2017-12-12 11:18:24 · 384 阅读 · 0 评论 -
订单分库分表实践总结
订单分库分表实践总结主库容量已接近服务器物理空间上限,同时也已经达到MySQL的处理上限,很快将无法再处理新增订单。旧订单库面临的问题有:1、超大容量问题订单相关表都已经是超大表,最大表的数据量已经是几十亿,数据库处理能力已经到了极限;单库包含多个超大表,占用的硬盘空间已经接近了服务器的硬盘极限,很快将无空间可用;2、性能问题转载 2017-07-28 00:18:09 · 4097 阅读 · 4 评论 -
mysql优化(1)show命令 慢查询日志 explain profiling
目录一、优化概述二、查询与索引优化分析1性能瓶颈定位Show命令慢查询日志explain分析查询profiling分析查询 2索引及查询优化三、配置优化1) max_connections2) back_log3) interactive_timeout4)转载 2016-02-25 18:31:26 · 733 阅读 · 0 评论 -
MySQL Profiling的使用
在本章第一节中我们还提到过通过 Query Profiler 来定位一条 Query 的性能瓶颈,这里我们再详细介绍一下 Profiling 的用途及使用方法。要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 MySQL 5.1正式版中已经转载 2016-02-25 16:19:41 · 408 阅读 · 0 评论 -
高性能MySql进化论(五):提速Alter Table
高性能MySql进化论:提速Alter Table 在系统的日常维护中,经常需要对表结构进行更新,例如添加/删除一个字段,改变一个VARCHAR的字段长度等等。MySQL针对这种修改表结构的处理方式是先创建一张新的结构的表,接着会通过执行Insert语句将旧表的内容插入到新表中,最后删除整张旧表。这种处理方式在数据量比较小的时候,不会有什么问题,可是当数据量很大的时候可能需要很多时转载 2015-11-26 19:04:41 · 806 阅读 · 0 评论 -
高性能MySql进化论(四):Summary,Cache,Counter表的使用
在实际的应用中,往往会定期的对一个周期内的系统数据进行统计分析。例如某购物网站定期的统计商品在一个月/年期内的销售情况,如果采用扫描所有相关表的方式在某个时间点进行统计分析, 由于数据量很大,以及表结构的复杂,性能可能会是很大的问题。针对这种情况可以通过使用Summary,Cache,Counter 数据表的方式来提高分析的效率。 Summary可以理解为通过定期执行Group B转载 2015-11-26 18:45:36 · 401 阅读 · 0 评论 -
高性能MySql进化论(三):ID(标示符)的选择
高性能MySql进化论(三):ID(标示符)的选择 在设计数据库表结构的时候,通常情况下每张表结构都有一个字段作为ID,因为 ID会被用来做查询,JOIN,FK等操作,所以ID设计的好坏对性能的影响很大。 在为ID选择合适的类型的时候不仅需要考虑这种类型在数据库中存储所占用的空间,还需要考虑该类型在计算或者是值比较时的特性,例如BIT类型存储的时候是二进制的形式,而转载 2015-11-26 18:41:54 · 423 阅读 · 0 评论 -
高性能MySql进化论(二):数据类型的优化_下
· BLOB/TEXT在实际的应用程序中往往需要存储两种体积较大的数据,一种是较大的Binary数据,e.g. 一张10M的图片,另外一种是 较大的文本 e.g.一篇几万字的文章。在Oracle中有BOLB和CLOB来应对这两种数据,而在MySQL中对应的是BLOB以及TEXT.鉴于这两种数据类型的特殊性,在MySQL中对BLOB以及TEXT的存储和操作做了特殊的处理转载 2015-11-26 18:41:14 · 356 阅读 · 0 评论 -
高性能MySql进化论(十三):查询缓存机制
对于很多的数据库系统都能够缓存执行计划,对于完全相同的sql, 可以使用已经已经存在的执行计划,从而跳过解析和生成执行计划的过程。MYSQL以及Oracle提供了更为高级的查询结果缓存功能,对于完全相同的SQL (字符串完全相同且大小写敏感) 可以执行返回查询结果。本文主要介绍MYSQL 查询缓存的一些特性,Oracle query cache可以参考http://www.oracle.com/t转载 2015-11-26 19:16:17 · 386 阅读 · 0 评论 -
高性能MySql进化论(十一):常见查询语句的优化
总结一下常见查询语句的优化方式1 COUNT1. COUNT的作用· COUNT(table.filed)统计的该字段非空值的记录行数· COUNT(*)或者是COUNT(not nullable field) 统计的是全表的行数如果要是统计全表记录数,COUNT(*)效率会比COUNT(not nullab转载 2015-11-26 19:14:30 · 356 阅读 · 0 评论 -
高性能MySql进化论(十):查询优化器的局限性
在“查询优化器常用的方式”一文中列出了一些优化器常用的优化手段。查询优化器在提供这些特性的同时,也存在一定的局限性,这些局限性往往会随着MYSQL版本的升级而得到改善,所以本文会列出一些常见的局限性,且不包含所有的。 1.1 关联子查询描述:因为select …from table1 t1 where t1.id in(select t2.fk from tab转载 2015-11-26 19:13:51 · 1207 阅读 · 0 评论 -
高性能MySql进化论(九):查询优化器常用的优化方式
1 介绍1.1 处理流程当MYSQL 收到一条查询请求时,会首先通过关键字对SQL语句进行解析,生成一颗“解析树”,然后预处理器会校验“解析树”是否合法(主要校验数据列和表明是否存在,别名是否有歧义等),当“解析树”被认为合法后,查询优化器会对这颗“解析树”进行优化,并确定它认为最完美的执行计划。 1.2 衡量标准MYSQL查询优化器衡转载 2015-11-26 19:11:22 · 440 阅读 · 0 评论 -
高性能MySql进化论(七):正确的使用索引
数据库引擎利用索引提高查询效率,同时也针对索引增加了很多的优化策略,但是在使用索引的过程中也有很多的细节问题需要注意,如果忽略了这些问题,辛辛苦苦建立的索引可能得不到很好的应用,而且有可能还会对性能有一定的影响,下面列出了在使用索引的过程中需要遵守的原则1 保持单纯的列所谓的“单纯的列”指的就是在作为查询条件时,不要使用运算符,函数对字段进行处理,否则相关的索引将不能使用转载 2015-11-26 19:08:18 · 316 阅读 · 0 评论 -
高性能MySql进化论(一):数据类型的优化_上
高性能MySql进化论(一):数据类型的优化_上 在数据库的性能调优的过程中会涉及到很多的知识,包括字段的属性设置是否合适,索引的建立是否恰当,表结构涉及是否合理,数据库/操作系统 的设置是否正确…..其中每个topic可能都是一个领域。 在我看来,在数据库性能提升关键技术中,对字段的优化难度相对较低且对性能的影响也非常的大。由于Mysql支持的数据类型比较多,且每个类转载 2015-11-26 18:40:11 · 465 阅读 · 0 评论 -
高性能MySql进化论(八):表以及索引的维护
为了拥有高性能的数据库,创建良好的表结构以及索引是必不可少的,与此同时对于表以及索引的维护也很重要1 表的维护1.1 检查并修复坏表数据库表损坏的原因很多,操作系统问题,硬件问题,或者是手工的修改了MYSQL的数据文件,都会导致表的损坏。当出现问题时可能会导致查询行为的异常,具体的异常行为在不同版本的数据库中都不同。当发现数据库的表行为有异常时,可以使转载 2015-11-26 19:09:51 · 325 阅读 · 0 评论 -
MySQL的表分区详解
一、什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表。mysql5.1开始支持数据表分区了。如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区。当然也可根据其他的条件分区。二、为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率。分区的一些优点包括: 1)、与单个转载 2015-11-26 16:14:03 · 295 阅读 · 0 评论 -
关于mysql 删除数据后物理空间未释放(转载)
OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。OPTIMIZE TABLE 是指对表进行优化。如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化。这个命令可以转载 2016-03-07 15:18:50 · 393 阅读 · 0 评论 -
高性能MySql进化论(十四):复制(Replication)
复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务转载 2015-11-26 19:17:24 · 420 阅读 · 0 评论 -
MySQL服务器最大连接数的合理设置
MySQL服务器的连接数并不是要达到最大的100%为好,还是要具体问题具体分析,下面就对MySQL服务器最大连接数的合理设置进行了详尽的分析,供您参考。我们经常会遇见“MySQL: ERROR 1040: Too many connections”的情况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力,另外一种情况是MySQL配置文件中max_conn转载 2015-08-05 12:02:29 · 782 阅读 · 0 评论 -
mysql执行sql语句优化分析命令explain命令小记
explain是用来分析sql语句,帮助优化的一个命令。她可以很详细的告诉你的sql语名出现的问题所在,以及是否用到索引。真的很好用。大家必须要会用哦!explain的语法如下: SQL Code复制内容到剪贴板explain [extended] select … from … where … 如果使用了extended,那么在执行完explain语句后转载 2015-09-25 00:01:41 · 1088 阅读 · 0 评论 -
高性能MySQL读书笔记:找出谁持有锁
高性能MySQL读书笔记:找出谁持有锁 问题的背景:在实际使用MySQL时,如果访问量比较大,那么很可能会出现大量Locked状态的进程,但是却不能方便的识别是哪条SQL引起的问题,很多人遇到此类问题时,多半是通过PhpMyAdmin查询可疑SQL,然后KILL掉,但问题是可疑SQL可能会很多,这样逐一尝试太过笨拙,有的人一怒之下很可能会重启MySQL,但如此治标不治本的方法肯定更转载 2015-11-27 13:52:59 · 363 阅读 · 0 评论 -
实例说明optimize table在优化mysql时很重要
今天在看CU的时候,发现有人问有关optimize来表优化的问题,当年因为这个问题,困扰我很长一段时间,今天有空我把这个问题,用实际数据来展示出来,让大家可以亲眼来看看,optimize table的重要作用,而不是似是而非的估计了。一,原始数据1,数据量查看复制打印?mysql> select count(*) as total from ad转载 2015-11-27 13:50:53 · 323 阅读 · 0 评论 -
MySql索引算法原理解析(通俗易懂,只讲B-tree)
刚开始学习的时候,百度去查,但发现好多说得太复杂不好理解,结合各个文章总结一下(建议大概看文字,不理解不要紧,然后再看图的执行步骤然后在结合文字,这样一切就清晰好多)B-tree,B是balance,一般用于数据库的索引。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。而B+tree是B-tree的一个变种,大名鼎鼎的MySQL就普遍使用B+tree实现其索引转载 2015-11-27 11:09:28 · 3405 阅读 · 0 评论