文档详情

优化-MYSQL数据库文档.docx

发布:2025-06-07约1.01万字共25页下载文档
文本预览下载声明

目录

TOC\o1-3\h\z\u一、mysql优化概述 1

二、分析需要优化的语句 1

1、使用mysql里面的慢查询日志, 1

2、使用profiles机制 3

三、索引 4

1、索引的类型 4

2、如何创建索引 4

3、删除索引 5

4、查询索引: 5

5、创建索引的注意事项 5

四、索引结构 6

五、explain(执行计划)工具的使用 7

六、使用执行计划,完成sql语句索引执行情况查询; 8

1、多列索引: 8

2、对于使用like的查询,查询如果是”%aaa”,不会使用到索引,‘aaa%’会使用到索引。 10

3、如果条件中有or,则要求or的索引字段都必须有索引,否则不能用到索引。 11

4、如果列类型是字符串,一定要在条件中将数据使用引号引用起来,否则不使用索引。 12

5、优化groupby语句。 12

6、当取出的数据量超过表中数据的20%,优化器就不会使用索引,而是全表扫描。 13

七、索引覆盖 14

八、前缀索引, 14

九、翻页优化 15

十、碎片整理 17

十一、锁机制讲解 18

1、表锁的演示: 19

2、行锁的演示: 21

十二、分区分表技术 21

1、分区类型: 22

一、mysql优化概述

页面静态化的内容,memcache,减少数据库的访问,提高网站的访问速度,无论如何优化,还是要操作数据库的,要从数据库的角度来优化,提高访问速度。

设计角度:存储引擎的选择,字段类型选择,范式

利用mysql自身的特性:索引,查询缓存,分区分表,存储过程,sql语句优化配置,

部署大负载架构体系:主从复制,读写分离。

硬件升级:

二、分析需要优化的语句

要查找执行速度比较慢的sql语句,

1、使用mysql里面的慢查询日志,

慢查询日志,是由mysql提供的,用于记录sql执行时间超过了某个时间界限,该时间界限我们可以自己设定,比如我们设定的时间界限为0.5秒,开启慢查询日志后,会自动记录执行时间超过0.5秒的sql语句。慢查询日志默认没有开启,默认的时间界限是10秒。

(1)如何开启慢查询日志,

方式一:打开mysql的配置文件,my.ini,添加如下语句:修改完成后,要重启mysql服务。

我们设置的时间界限。如果不设置则默认是10秒设置慢查询日志的保存位置,该保存位置,可以自己随意设置,此处的slow-log

我们设置的时间界限。如果不设置则默认是10秒

设置慢查询日志的保存位置,该保存位置,可以自己随意设置,此处的slow-log是慢查询日志的名称,该名称也是可以自己随意的设置。

如果log-slow-queries后面没有设置值,则会采用默认的名字保存在默认的位置。该默认位置和表文件的存储位置一致。

设置数据库和表文件的目录。

设置数据库和表文件的目录。

(2)开始测试,是否记录执行时间超过0.5秒的sql语句。

selectbenchmark(执行次数,表达式);

在慢查询日志文件里面查看是否记录:

(3)相关的一些命令,

查看慢查询日志的时间界限

可以在当前会话中进行修改慢查询的时间界限:

语法:setlong_query_time=时间界限

2、使用profiles机制

该机制开启后,会记录每个sql语句的执行时间,精确到小数点后8位。

如果开启:setprofiling=1|0值为1则是开启,为0则是关闭。

查看sql语句的执行时间:showprofiles

一般sql语句执行比较慢,原因是没有添加索引,

没有添加索引之前:

添加索引之后使用的时间:

三、索引

索引:利用字段的某些属性,快速的定位数据(磁盘,柱面,磁道,扇区)

1、索引的类型

唯一索引(uniquekey):字段数据是唯一的,数据内容里面能否为null,在一张表里面,是可以添加多个唯一索引。

主键索引(primarykey):数据记录里面不能有null,数据内容不能重复,在一张表里面不能有多个主键索引。

普通索引(index):使用字段关键字建立的索引,主要是提高查询速度。

全文索引(fulltextindex):在比较老的版本中,只有myisam引擎支持全文索引,在最新的版本中(可能是mysql.5.6)innodb引擎也支持全文索引,在mysql中全文索引不支持中文。

2、如何创建索引

(1)在创建表的时候,同时创建索引,

createtablestu(

idintprimarykeyauto_increment,

namevarchar(32)notnull,

显示全部
相似文档