MySQL优化
文章平均质量分 85
苍鹰蛟龙
这个作者很懒,什么都没留下…
展开
-
Explain执行计划信息
在执行SQL的时候,经常有些SQL未正确使用到索引,导致程序变慢,通过使用explain进行分析SQL,可以清楚表的读取顺序、索引的使用情况等,从而优化索引。 在用explain执行SQL计划分析时,有以下信息显示: 1、id id相同,执行顺序由上至下;id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。2、select_type select_type中...原创 2018-07-16 22:37:01 · 700 阅读 · 0 评论 -
Explain索引优化实例
关于Explain的执行计划详细信息请参考上篇文章。下面用Explain分析案例。 首先建立表student结构,该表目前没有索引,如下: 一、案例1案例:查询学号student_num=1,年龄age>20,班级class=1的记录 id为1,只有一次查询; select_type为SIMPLE,表示该条SQL为简单查询; table为student,表示查询来自...原创 2018-07-17 23:19:27 · 754 阅读 · 0 评论 -
mysql慢查询日志分析
mysql的慢查询日志是mysql提供的一种记录日志的功能,用来记录mysql相应时间超过long_query_time值的sql语句,long_query_time默认值为10秒,相应时间超过10秒的SQL则会被记录到日志中。1、查看慢日志功能的状态,慢日志功能默认是关闭的 show variables like '%slow_query_log%'; OFF表示慢日志功能处于关闭...原创 2018-07-29 13:06:17 · 874 阅读 · 1 评论 -
索引优化
素材:student表 列信息: 一、复合索引按索引中的字段顺序进行检索数据复合索引可以由好几个字段组成,在查询语句中若想使用该索引,必须按建索引字段的先后顺序使用。例如在student_num,name,age上建立一个复合索引create index id_num_name_age on student(student_num, name, age);例1:查询name...原创 2018-07-22 12:36:31 · 232 阅读 · 0 评论 -
MySql锁详解
从数据库的操作粒度讲,可以分为表锁和行锁 表锁:当对表进行写操作时,锁住整个表 行锁:当对表进行写操作时,只锁住写操作的相关行 从数据读写的角度讲,可以分为读锁和写锁 读锁,又叫共享锁,对同一根数据资源,多个读操作可以同时进行而互不影响 写锁,又叫排它锁,针对同一根数据资源,当前写操作没有完成前,其它的读写操作被阻塞一、表锁在MySql中,一般表锁用MyISAM存储引擎。表锁...原创 2018-08-04 16:59:09 · 357 阅读 · 0 评论 -
MySql类型转换导致行锁升级为表锁
在MySql的写语句中,给表列赋值与表类型不符合时,MySql底层的优化器发挥作用,会做一个强制类型转化,此时能正常操作,但会导致行锁升级为表锁。示例如下 以student表为例,表字段类型: 表内容如下: 打开两个session会话窗口,并把两个会话窗口中的MySql的自动提交模式改为手动提交>set autocommit=false; 在会话窗口1中执行更新语句,...原创 2018-08-05 10:58:06 · 6880 阅读 · 4 评论 -
间隙锁
间隙锁:用范围条件检索数据时,并请求共享锁或排他锁时,InnoDB都会给符合条件的已有记录的索引项添加锁,对于键值在条件范围内但表中不存在的记录,就叫做间隙(GAP)。InnoDB也会对这个间隙加锁,这种锁机制就叫做间隙锁。 示例如下。以student表为例,表内容如图所示: 打开两个session窗口1会话,两个会话中都关闭事务自动提交,给为手动提交>set autocommi...原创 2018-08-05 12:38:36 · 934 阅读 · 0 评论 -
锁定指定条件行
有时需要在程序中查询某条SQL语句时,暂时不更新查询到的数据,在程序中后面再执行更新,但其它事务此时有可能会更新掉数据,所以为了避免其它事务的影响,可以先暂时锁住指定条件的数据。 示例如下,以student表为例,其内容如下: 下面打开两个session对话窗口,都设置成手动提交事务模式>set autocommit=false;在session会话1窗口中先锁住name=’...原创 2018-08-05 16:43:42 · 284 阅读 · 0 评论 -
Show profiles
Show profiles是MySql用来分析当前会话SQL语句执行的资源消耗情况,可以用于SQL的调优测量。 Show profiles默认状态下是关闭的,执行set profiling=true;打开状态 可以用show profile查看最近执行的SQL语句执行情况 其中Query_ID为每条执行SQL的编号,Duration为执行时间,Query为SQL语句。 可以查询每个...翻译 2018-08-06 21:59:44 · 4576 阅读 · 0 评论