mysql性能分析与优化

Hash索引的限制

  Hash索引必须进行二次查找

  Hash索引无法用于排序

  Hash索引不支持部分索引查找,也不支持范围查找

  Hash索引中Hash码的计算可能存在Hash冲突

为什么要使用索引

  索引大大减少了存储引擎需要扫描的数据量

  索引可以帮助我们进行排序以避免使用临时表

  索引可以把随机I/O变为顺序I/O

索引优化策略

  索引列上不能使用表达式或函数

  前缀索引和索引列的选择性,索引的选择性是不重复的索引值和表的记录数的比值

联合索引

  如何选择索引列的顺序

  经常会被使用到的列优先

  选择性高的列优先

  宽度小的列优先

覆盖索引

  优点:

  可以优化缓存,减少磁盘IO操作

  可以减少随机IO,变随机IO操作变为顺序IO操作

  可以避免对Innodb主键索引的二次查询

  可以避免MyISAM表进行系统调用

  无法使用覆盖索引的情况:

  存储引擎不支持覆盖索引

  查询中使用了太多的列

  使用了双%号的like查询

使用索引来优化查询

  使用索引扫描来优化排序

  通过排序操作

  按照索引顺序扫描数据

  索引的列顺序和Order By子句的顺序完全一致

  索引中所有列的方向(升序,降序)和Order by子句完全一致

  Order by中的字段全部在关联表中的第一张表中

模拟Hash索引优化查询

  只能处理键值的全值匹配查找

  所使用的Hash函数决定着索引键的大小

删除重复和冗余的索引

查找未被使用过的索引

更新索引统计信息及减少索引碎片

  analyze table table_name

  optimize table table_name 使用不当会导致锁表

如何获取由性能问题的sql

  通过用户反馈获取存在性能问题的SQL

  通过慢查日志获取存在性能问题的SQL

  实时获取存在性能问题的SQL

使用慢查询日志获取有性能问题的SQL

slow_query_log 启动停止记录慢查日志  set global

slow_query_log_file 指定慢查询日志的存储路径及文件(日志存储和数据存储分开存储)

long_query_time 指定记录慢查日志SQL执行时间的伐值 (记录所有符合条件的SQL)

常用的慢查询日志分析工具 (mysqldumpslow)

  汇总除查询条件外其他完全相同的sql,并将分析结果按照参数中所指定的顺序输出

  mysqldumpslow -s r -t 10 slow-mysql.log

  -s order(c,t,l,t,at,al,ar) 指定按哪种排序方式输出结果

  c :总次数

  t :总时间

  l :锁的时间

  r :总数据行

  at,al,ar:t,l,r平均数

  

  -t top 指定取前几条作为结束输出

  

常用的慢查日志分析工具(pt-query-digest)

  pt-query-digest \

  --explain h=127.0.0.1,u=root,[email protected] \

  slow-mysql.log

原文地址:https://www.cnblogs.com/lijintao1025/p/8617245.html

时间: 2024-09-27 12:18:33

mysql性能分析与优化的相关文章

MySQL性能分析和优化-part 1

MySQL性能优化 平时我们在使用MySQL的时候,怎么评估系统的运行状态,怎么快速定位系统瓶颈,又如何快速解决问题呢? 本文总结了多年来MySQL优化的经验,系统介绍MySQL优化的方法. OS性能分析 使用top观察top cpu/memory进程 使用mpstat观察每个CPU核心的CPU使用情况 使用iostat观察系统io状况 使用sar -n DEV观察网卡流量 使用vmstat查看系统内存使用情况 查看系统日志 使用dstat 记录和查看历史数据 查看昨天的数据 查看swap 查看

MySQL性能分析和优化

1. EXPLAIN 优化你的 SELECT 查询 2. 当只要一行数据时使用 LIMIT 1 3. 为搜索字段建索引 like %最好放右边 4. 尽可能的使用 NOT NULL 5. 在Join表的时候使用相当类型的例,并将其索引 6. 把IP地址存成 UNSIGNED INT 7. 避免 SELECT * 8. 永远为每张表设置一个ID 9. 使用 ENUM 而不是 VARCHAR 10. 选择正确的存储引擎

【转】由浅入深探究mysql索引结构原理、性能分析与优化

摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1.简单介绍B-tree B+ tree树 2.MyisAM索引结构 3.Annode索引结构 4.MyisAM索引与InnoDB索引相比较 第三部分:MYSQL优化 1.表数据类型选择 2.sql语句优化 (1)     最左前缀原则 (1.1)  能正确的利用索引 (1.2)  不能正确的利用索引 (1.3)  如果一个查询where子句中确实不需要password列,那就用“补洞”. (1.4)  like (2)

MySQL性能分析之explain

mysql性能分析之explain Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句. Explain语法:explain select … from … [where …] 例如:explain select * from news; 输出:+--+-----------+-----+----+-------------+---+----

MySQL索引分析与优化

索引分析 - 准备 先创建三张表:tb_emp(员工表)tb_dept(部门表)tb_desc(描述表) 1. tb_emp(员工表) DROP TABLE IF EXISTS `tb_emp`; CREATE TABLE `tb_emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL, `deptid` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=I

linux服务器的性能分析与优化(十三)

[教程主题]:1.linux服务器的性能分析与优化 [主要内容] [1]影响Linux服务器性能的因素 操作系统级 Ø CPU 目前大部分CPU在同一时间只能运行一个线程,超线程的处理器可以在同一时间处理多个线程,因此可以利用超线程特性提高系统性能. 在linux系统下只有运行SMP内核才能支持超线程,但是安装的CPu数量越多,从超线程获得的性能提升越少. 另外linux内核会将多核的处理器当做多个单独的CPU来识别,例如,两个4核的CPU会被当成8个单个CPU,从性能角度讲,两个4核的CPU整

1.linux服务器的性能分析与优化

[教程主题]:1.linux服务器的性能分析与优化 [课程录制]: 创E [主要内容] [1]影响Linux服务器性能的因素 操作系统级 CPU 目前大部分CPU在同一时间只能运行一个线程,超线程的处理器可以在同一时间处理多个线程,因此可以利用超线程特性提高系统性能. 在linux系统下只有运行SMP内核才能支持超线程,但是安装的CPu数量越多,从超线程获得的性能提升越少. 另外linux内核会将多核的处理器当做多个单独的CPU来识别,例如,两个4核的CPU会被当成8个单个CPU,从性能角度讲,

MySQL性能分析及explain的使用

MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id  selecttype  table  type possible_keys  key key_len  ref rows  extra各列. 其中, type=const表示通过索引一次就找到了: key=primar

总结:windows下性能分析以及优化报告

性能分析以及优化     使用的是vs2017自带的性能分析工具. 主要分析了遇到的性能瓶颈,以及想到的优化方法,有的验证了,有的没有来得及. 首先看整体用时以及cpu占有率. 最终在我的设备上(I5-5200U 三星860EVO固态)运行时间约为27.3S.期间cpu占有率比较稳定. 前0.5秒cpu占用率低,大概是因为这段时间是刚开始读取文件,cpu并没有处理任务,后来便进入一边读取一遍计算的状态,cpu占有率就上来了,大概25%,但是还是不高. 而且在这里我遇到一个十分奇怪的现象 直到代码