【MySQL性能优化】Mysql系统变量配置

来源:互联网 发布:青年网络公开课罗思义 编辑:程序博客网 时间:2024/05/16 03:48

MySQL 5.5版本支持超过300种可配置的系统变量。其中很 多系统变量如果得到正确设定,可以对整体系统性能改进起到很 大作用。系统变量可以定义MySQL的配置方式、重要的文件和


数据的存放位置、如何管理兼容性以及MySQL拓扑内的交互等。 在本章和本书中有关优化SQL语句的章节中,我们将集中讨论一 小部分对执行和优化单个SQL语句有直接影响的MySQL系统

变量。

本章将介绍下面的内容:

•内存相关的系统变量 

•日志和工具系统变量 

•各种查询相关的系统变量


6.1内存相关的系统变量

MySQL内存系统变量能够影响全局内存的使用,也能够影响 到多线程的单一 MySQL进程中会话的内存使用情况。我们不会 在本书中讨论有关系统调整对于优化MySQL中内存使用情况的 重要性。一定要注意的是,MySQL对于进程分配和内存存储引擎 的分配是没有限制的。错误的系统调整会导致系统可用的内存资 源耗尽。

这些MySQL系统变量可以在MySQL配置文件中定义并在启 动时加载。很多MySQL变量是动态的——也就是说,它们的值 可以在运行时通过mysql客户端的SET命令更改。可以参考 MySQL参考手册来了解某个特定版本中所有动态变量的定义。

注意

在MySQL中,引用会话其实与一个给定的连接有关。默认 情况下,一个连接也就是一个线程——即一个连接有且只有一个

线程。

注意

对于熟悉Oracle的读者,全局内存缓冲区可以被理解成 MySQL进程的系统全局区域(SGA)。这个缓冲区是在mysqld进 程启动时被预先分配的。每个会话的内存缓冲区以及内存表可以 被理解成当前运行的mysqld进程的进程全局区域(PGA)。

除非特别指出,否则下面所有变量都可以在MySQL 5.0或更 高版本中使用。这些变量中的很多也存在于更早的MySQL版本中, 如 MySQL 3.x 和 MySQL 4.x 中。

1.全局内存缓冲区

MySQL变量名

描 述

keybuffersize

这个变量定义了 MylSAM索引码的缓冲区的大 小,通常这个变量也被称为码缓存。可以定义多 个不同大小的已命名的码缓冲区

innodb_bufTer_pool_size

这个变量定义了 InnoDB缓冲池的大小,InnoDB 缓冲池是存储数据和索引页的主要场所

innodb—additional mem_pool_size

这个变量定义了 InnoDB的数据字典以及内部数 据结构缓冲区的大小

querycachesize

这个动态变量定义了査询缓存的大小。查询缓存 可以用来缓存经常执行的SELECT语句

2.全局/会话内存缓冲区

 

max heap—table一size

这个动态变量定义了一个MEMORY存储引擎表的最大容量

tmp table size

这个动态变量定义了一个内部基于内存的临时表(在此表被修 改并写入磁盘之前)的最大容量。这个变量和max heap table一 size密切相关

 

3.会话缓冲区

join 一 buffer一 size

这个动态变量定义了当索引无法满足连接条件时在两个表之 间做全表连接操作能够使用的内存缓冲区的大小

sortbuffersize

这个动态变量定义了当索引无法满足需要的顺序信息时对结 果排序能够使用的内存缓冲区的大小

read buffer size

这个动态变量定义了连续数据扫描时能够使用的内存缓冲区 大小

readrndbuffersize

这个动态变量定义了有序(也就是不连续的)数据扫描时能够使 用的内存缓冲区大小

 

警告

一个常见的问题是管理员没有认识到这4个缓冲区是以每个 线程为基础定义的。在MySQL 5.1以及更高版本中,sort_buffer_ size缓冲区的默认值可以在128K/256K〜2M之间变化。如果一个 缓冲区的大小定义为10M或者100M的话,就会对查询和系统性 能产生相反的影响。在没有证据能证明性能提升的情况下,最好 的方法是恢复这4个变量的默认值来保证总体内存利用率最大。

可以在MySQL参考手册中找到关于这些变量和其他变量的 更多信息:http://dev.mysql.eom/doc/refhian/5.S/en/memory-use.html

3. key_buffer_size

key buffer size是只存储MylSAM索引信息的全局内存缓冲 区。在对应的.MYI文件中的索引数据从磁盘上被读取出来然后存 入这个缓冲区。想要调整变量key_biiffer_SiZe的大小,只需要简 单地统计所有MylSAM表中总索引的大小,然后随着数据随时间

增长不断调整即可。

当这个索引码缓冲区中没有足够的空间来存储新的索引数据 时,将会用最近最少使用(LRU)的方法覆盖掉旧的页面。

注意

即使运行一个全部采用InnoDB的模式,仍然需要定义一个 索引码缓冲区,因为MySQL元信息与MylSAM定义的相同。可 以给这个小的缓冲区定义一个8M的值。

当观察单个MySQL连接时,一个没调整好的MylSAM索引 码缓冲区能够呈现出不同状态。在SHOW [FULL] PROCESSLIST 的State列中,值Repairing the keycache是一个明显的指标,它指 出当前索引码缓冲区大小不足以执行当前运行的SQL语句。这将 导致额外的磁盘I/O开销。

想要了解更高级调整信息可以使用以下变量:key_Cadie_ age threshold、key cache block size、key cache_divisionJimit 和 preloadbufFersize

6.1.2命名码缓冲区

除了默认的MylSAM码缓冲区,MySQL支持其他的命名码 缓冲区。这使得管理员能够为MylSAM索引定义专用的内存池, 该MylSAM可以为命名码缓冲区分配和指定给定表。下面是创建 一个已命名64M的缓存的示例:

mysql> SET GLOBAL hot.key buffer size=1024*1024*64;

也可以在MySQL配置文件my.cnf中定义这个缓存。

警告

在MySQL配置文件中,可以用字节或者KB、MB和GB这 样的通用格式来定义变量的大小。当使用SET命令动态地定义同 一个变量时,只有以字节为单位的数字值是合法的。可以用下面 的语法把字节转化成IK、1M或者64M: 1024X1024X64,然而 这并不是必需的。

可以使用CACHE INDEX语句把表索引分配到指定的命名缓 存上:

mysql> CACHE INDEX tablel, table2 IN hot;

有关哪些表被缓存到命名缓存中这样的信息是不会被持久化 的。在MySQL重启的过程中,这些信息都会丢失。如果想在系 统重启的时候完成这些功能,可以在服务器启动的时候使用 init一file变量运行特定的SQL语句。

如果你能够预先填充包含给定的表中所有索引的码缓冲区, 当码缓冲区能够存储所有的索引或者没有叶子节点页面的索引时 将会获得额外的性能提升。请看下面的示例:

LOAD INDEX INTO CACHE tablel, table2;

可以使用这个语法把索引加载到任何索引码缓存中,包括默认索 引码缓存。

9.2.1 innodbbuffer—pool—size

innodb_buffer_pool_size是用来存储所有InnoDB数据和索引 的全局内存缓冲区。对完全使用InnoDB引擎的模式来说,这是 最重要的缓冲区,一定要正确分配。不正确的分配这个缓冲区的 空间可能导致额外的磁盘I/O开销并降低查询性能。


对小型系统来说,可以用所有InnoDB表的容量加上一个小 的额外开销来计算出这个缓冲区的合适大小。如果你只有一个小 的有限空间的RAM存储器时,这一点尤为重要。举例来说,当 你在一个支持1.7GB的RAM存储器的Amazon Web Service小实 例上分配1GB的InnoDB缓冲区,而总数据库大小仅有200MB 时,你就等于分配了不必要的内存空间。

对于这个变量,没有最好的佔计大小的方式,因为还有很多 其他因素都会影响到MySQL的内存总使用量。常见的方法是把 这个变量设定为RAM空间的80%,但在很多情况下这样设定也 是不合理的。

可以使用 SHOW GLOBAL STATUS 或者 SHOW ENGINE INNODB STATUS命令来监控InnoDB缓冲池的使用情况。请看 下面的示例:

mysql> SHOW GLOBAL STATUS LIKE * innodb buffer%1;

 

I Variable name I Value

 

+

1 Innodb

—buf fer_

Jpool-

■pages

data |

+

196892 |

1 Innodb_

■buf f er

pool

pages

一dirty I

37799 I

1 Innodb

buffer

pool

mmam ■

pages

一flushed I

456354 |

1 Innodb

buffer

_pool_

pages

_free I

445552 1

1 Innodb一

_buf fer_

pool

M mm

—pages

_misc I

129C8 丨

1 Innodb

buffer

pool

mmm ■

■pages

—total I

655352 |

1 Innodb—

■buf fer_

一 pool-

—read—

ahead 1

122 I

I Innodb

buffer

pool

mm

read

ahead一evicted 1

0 I

1 Innodb,

”buf fer_

J)OOl-

_read_

requests I

4421251611

1 Innodb

buffer

pool

reads

1

18283 |

1 Innodb—

_buf fer_

pool

一 麵

wait

free |

0 |

1 Innodb

buffer

pool^

’write

一requests I

1750151631

+

 

 

 

+•

+

mysql> SHOW ENGINE INNODB STATUS

 

BUFFER POOL AND MEMORY

Total memory allocated 43168694272; in additional pool allocated 0

Dictionary memory allocated 960147

Buffer pool size 2574464

Free buffers 1893581

Database pages 618715

Old database pages 228288

Modified db pages 52209

Pending reads 0

Pending writes: LRU 0, flush list 0, single page 0

Pages made young 16276, not young 0

0•75 youngs/s, 0.00 non-youngs/s

Pages read 34431, created 584284, written 2473937

0•00 reads/s, 3.12 creates/s, 219.40 writes/s

Buffer pool hit rate 1000 / 1000, young-making rate

1. / 1000 not 0 / 1000

Pages read ahead 0 • 00/s, evicted without access 0 . 00/s

LRU len: 618715, unzip一LRU len: 0

I/O sum[0]:cur[1104], unzip sum[0]:cur[0]

总共有超过50个InnoDB相关的系统变量。所有这些变量都 以丨11110011)_前缀开头。那些会影响到整体系统性能并且应该在定义 innodb_key_buffer_size变量时应该考虑到的InnoDB变量包括: innodb_buffer_pool_instances(从 5.5 开始)、innodb_max_dirty一 pagesjpct、innodb_thread一concurrency、innodb一spin一wait一delay、 innodbjpurge—threads(从 5.5 开始)、innodb—checksums、innodb_file一 per_table 以及 innodb_log_file_size。

9.2.2 innodb additional mem pool size

innodb_additional_mem_pool_size 变量为 InnoDB 特定数据字

典信息定义了内存池。对于这个变量,没有什么好的方法来确定 它的最优值,一般将其设定为10M。在MySQL 5.5中默认大小为 8M。在早期版本中,默认值是1M。如果这个缓冲区空间不足, MySQL会在错误日志中报告一个警告信息。

9.2.3 querycachesize

query cache size变量是一个用来存储经常缓存过的查询全 局内存缓冲区。当启用query_cache_type变量之后,SELECT查询 会被自动缓存起来。还可以通过SQL一CACHE和SQL一NO_CACHE 来进一步确定哪些语句需要被缓存。启用查询缓存能够在读取操 作频繁的系统中显著地改进性能,但它也可能降低读/写系统的整 体性能。

使用query—cache_type变量可以总体启用和禁用查询缓存。 启用时,query_cache_size的值可能为0,这表示没有查询需要被 缓存;而MySQL实例可以通过动态地改变query_cache_size的值 在某个时间仍然可以支持缓存。在不需要的时候从物理上禁用查 询缓存可以带来一些小的性能开销。

可以使用下面的语句动态启用查询缓存:

mysql> SET GLOBAL query—cache一type = 1;

mysql> SET GLOBAL query一cache_size = 1024 ★ 1024 * 16;

要动态禁用查询缓存可以使用下面的语句:

mysql> SET GLOBAL query_cache_type = 0; mysql> SET GLOBAL query一cache_size =0;

可以通过 SHOW GLOBAL STATUS 命令或者 INFORMATION— SCHEMA.GLOBAL一STATUS表来监控查询缓存的有效性。请看 下面的示例:

 

 

+ +

I Qcache^

■queries一in一cache

1 8115 |

I Qcache

■inserts

1 596110709 |

1 Qcache^

hits

I 1015208171 |

I Qcache

一lowmem—prunes

I 526595375 |

1 Qcache^

_not_cached

1 1499575 |

I Qcache_

■free_memory

I 8400752 |

I Qcache—

■free一blocks

I 2465 |

1 Qcache— +

■total一blocks

I 18707 | + +

mysql> SHOW GLOBAL STATUS LIKE

+

I Variable name

1Qcache%1;

+

I Value

+

 

可以用下面的公式来确定查询缓存的有效性:

((Qcache一hits/(Qcache_hits + Com_select + 1))*100)

在确定读写量时,一定要把Qcache_queries_in_cache状态变 量考虑进去。这个变量将和Com_sdeCt状态变量一起决定你的 MySQL实例的总体读操作的满意率。

查询缓存还可以通过很多不同的系统变量来进一步优化,这 些系统变量会影响到个别查询的分配。这些变量包括: query cache—limit、query—case_min_res unit、query—cache_alloc— block size、query cache wlock invalidate 和 queryjprealloc—size。

9.2.4 max_heap—table_size

这个变量定义了 MySQL ME MORY存储引擎表的最大容量。 当某个表容量超过最大值时,应用程序会收到下面的信息:

mysql> SET SESSION max一heap一table_size=1024*1024; mysql> CREATE TABLE tl(

-> i INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

-> c VARCHAR(1000)) ENGINE=MEM〇RY;


mysql> INSERT INTO tl(i) VALUES

-> (NULL),(NULL),(NULL),(NULL)• (NULL)•

-> (NULL), (NULL)f (NULL)f (NULL),(NULL);

mysql> INSERT INTO tl (i) SELECT NULL FROM tl AS a, tl

AS b, tl AS c;

ERROR 1114 (HY000): The tableftlf is full

如前所述,这个变量有一个全局默认值,而且在上例的每个 线程上也可以指定这个变量的值。MySQL并没有为所有 MEMORY表的总容量做任何限制。这个变量仅用于单个表。

MEMORY存储引擎表的总大小可以通过SHOW TABLE STATUS 命令和 INFORMATION一SCHEMA.TABLES 表来确定。

另外,MEMORY存储引擎表对任意字符列都使用固定的宽 度。在前面的示例中,当在MEMORY表中定义时,那么 VARCHAR(IOOO)列实际上使用的是CHAR(IOOO)。因为有了这个 限制,一个MEMORY表无法包含任何TEXT(即CLOB)或者 BLOB字段。这也是tmp_table—size变量中非常重要的一点。

9.2.5 tmpable—size

max_heap_table_size变量和tmp_table 一 size变量中的最小值定 义了内部临时表的最大容量,内部临时表用于存储在内存中的查 询执行过程。如果在EXPLAIN SELECT的结果中的Extra列中出 现了 Using temporary,那么可以判断在查询执行过程中用到了内 部临时表。一个SQL查询可以使用多个临时表。

MySQL使用MEMORY存储引擎来支持这些内部临时表。当 内部临时表的容量超过max_heap_table_size变量和tmptable 一 size 变量中的最小值时,MySQL会在临时位置创建一个基于MylSAM 磁盘的表。由于MEMORY存储引擎的限制,为临时表定义的任 何TEXT和BLOB列都会导致一个基于磁盘的MylSAM临时表。

在临时表中定义大变量字符数据类型也会导致创建基于磁盘的临 时表,因为这些字段是固定宽度的。

目前没有一种简便的方式来确定内部临时表的总容量。可以 通过 MySQL 状态变量 created_tmp一tables 和 created_tmp_disk_ tables来分别确认创建了临时表或者基于磁盘的临时表,请看下 面的示例:

mysql> SHOW SESSION STATUS LIKE 1create%tables*;

+ + +

I Variable_name | Value I

+ + +

I Created tmp disk tables I 0 I

I Created一tmp_tables I 6 I

+ + +

mysql> SELECT ..•

mysql> SHOW SESSION STATUS LIKE 1create%tables1;

+ + +

I Variable_name | Value I

+ + +

I Created tmp disk tables | 1 I

I Created tmp tables I 8 I

+ + +

注意

衡量MySQL状态变量的值也会对返回的结果有影响。例如, 执行SHOW STATUS命令生成一个临时表。在MySQL版本、全 局范围以及会话范围内的变量的值也会有不同。所以一定不要忘 记经常检查测量变量带来的影响。

了解MySQL中内部临时表的操作原理对系统性能是至关重 要的。例如,超过容量限制并写入磁盘的高并发内部临时表会出 现如下错误:

ERROR 126 (HY000) : Incorrect key file for table ’// tmp/#sql_5b7_l.MYI1; try to repair it

这是由于tmpdii•变量定义的磁盘空间已经满了。这个错误中 提到的临时磁盘表没有办法修复了。在MySQL5.5中,可以使用 PERFORMANCE一SCHEMA来帮助统计基于磁盘的临时表的总

大小。

tmp_table_size变量有一个默认全局值,它也可基于每线程来 指定,这对那些需要生产很大的临时表的查询很有好处。

可以在MySQL参考手册中找到更多关于如何使用内部临时 表的信息:http://dev.mysqLcom/doc/refinan/5.5/en/mtemal-temporary- tables.html o

9.2.6 joinbuffer—size

join buffer size定义了每个线程的内存缓冲区,当查询必须 连接两个表的数据集并且不能使用索引时,这个缓冲区会被用到。 这个缓冲区是专门为每个线程的无索引连接操作准备的。可以通 过查询计划中Extra列的值为Using join buffer来证实使用了这个 缓冲区。建议将这个缓冲区设置为默认大小。增加这个缓冲区的 大小也不会加快全连接操作的速度。为这个缓冲区设定太大的容 量可能会对高连接的环境中的内存使用造成影响。

9.2.7 sort_buffer_size

这个变量定义了每个线程用于对结果集排序的每线程缓冲 区。可以通过查询计划中Extra列的值为Using flle-sort来确定使 用了这个缓冲区。不推荐你增加这个缓冲区的大小,因为这个缓 冲区是完全分配给每个请求的,而且当默认值太大时可能会降低 查询的执行速度。

9.2.8 read buffer_size

当SQL查询执行连续的表数据扫描时会用到这个缓冲区。只 有在大量连续表数据扫描时才推荐增加这个缓冲区的大小。

9.2.9 read—md_buffer_size

这个缓冲区用来存储那些作为排序操作的结果被读取的数 据。这个缓冲区和read一buffer一size的不同之处在于,它读取的连 续数据是和数据在磁i上的^储方式相关的。只有在执行大型 ORDER BY语句时才推荐增加这个缓冲区的大小。


6.2有关基础工具的变量

slow_query_log(从 5.1 版本开始)

这个动态布尔变量决定是否在日志中记录执 行缓慢的查询

siow_query_log_file (从 5.1 版本开始) log_slow_queries (对 5.0 和更早版本, 5.1开始废弃)

当输出结果记录到文件中时,这个动态变景用 来指定执行缓慢的查询日志的文件名

long_query_time

这个动态变量用来指定一个正常查询最大的 执行时间,超过这个时间,查询就被认为是执 行缓慢的查询

m

generaljog (从5.1版本开始)

这个动态布尔变量决定是否把所有的数据库 查询都记录在日志中

general_log_file (从 5.1 版本开始) log (对5.0和更早版本,5.1开始废弃)

当输出结果记录到日志中时,这个动态变量指 定全面日志的文件名

log_output(从5.1版本开始)

这个动态变量定义了执行缓慢的査询日志和 全面日志的目标类型

profiling

这个动态变量定义了分析每个线程的语句

 

2 slow—query—log

这个布尔变量可以启用执行缓慢的查询的日志功能,日志将 会报告所有执行时间超过long_query_time变量值的查询。这里强 烈推荐一直定义这个选项,并且对那些运行时间长的可以优化的 查询的结果经常分析。这是一个可以被动态改变的全局变量。

技巧

缓慢查询日志和通用查询日志是分别由slow一query_log和 general Jog系统变量动态控制的。在MySQL 5.0及之前的版本中, 这些日志不是动态的,想要启用或者禁用这些功能都需要重启 MySQL实例。

3 slow_query—log—file

这个变量定义了当慢查询日志功能开启时保存所有被记录的 查询文件的文件名。这是个全局变量,可以动态改变它的值。

4 generaljog

这个变量用来启用记录每条查询执行情况的全面查询日志。 这个变量只能在每个服务器实例值上启用或者禁用。这是个全局 变量,可以动态改变它的值。

5 general loq file

这个变量定义了记录了当全面日志启用时所有SQL查询的文 件名。这是个全局变量,可以动态改变它的值。

6 long_querytime

这个变量指定了一个查询执行时间的限制,当慢查询日志功 能启用时,执行时间超过这个限制的查询都会被记录在慢查询日 志中。从MySQL 5.1.21开始,这个变量接受以毫秒为单位的值。 当指定日志输出为TABLE类型时,这个变量只支持以秒为单位 的值。这是一个全局变量,可被动态定义。

7 log output

这个变量定义了慢查询日志和全面查询日志的输出位置,有 效的选项有FILE、TABLE和NONE。当定义输出位置为FILE时, 日志的输出文件分别由slow_query_log_file和general一log_file系 统变量来定义。如果这个变量为TABLE,日志输出将会分别记录 在mysql.slow一log和mysql.general_log表中。这两个表是在内部 以CSV存储引擎定义的,所以不支持任何索引。当需要频繁查询 这些表时,建议创建表的副本并相应地优化你的查询。这是一个 全局变量,可被动态定义。

8 profiling

MySQL通过分析工具暴露一些语句执行的内部细节信息。这 个布尔会话变量可以激活细节语句分析并且可以提供SQL的精 确到毫秒级的准确执行时间。这个工具还可以计算出关键的内部 组件的时间并逐步跟进查询计划进程中。

可以通过profiling_history一size变量控制在每个线程分析缓 冲区中的SQL语句的数量。


6.3其他优化变量

optimizer_switch (从 5.1 版本开始)

这个变量决定了 MySQL优化器中哪个高级索 引合并功能会被启用

defaultstorage—engine

当没有指定存储引擎时,这个变量定义了表使 用的存储引擎

max_allowed_packet

这个变量定义了结果集的最大容量

sql_mode

这个变置定义了支持的各种服务器SQL模式

innodb strict mode(从 5.1 版本开始)

这个变量定义了一个专门为InnoDB插件提供 的服务器SQL模式级别

6.3.1 optimizer—switch

 

这个选项定义了一系列MySQL查询优化器特性的高级开关, 可以用来关闭(默认是激活状态)三种不同的索引合并条件以及引 擎下推条件。

具体内容可以从以下系统变量的介绍中了解到:max_seeks一 for_key、optimizer_prune_level、optimizer—search_depth 以及 engine^ condition_pushdown o

default_storage__engine

当未指定ENGINE值时,这个变量用来为CREATE TABLE 命令指定存储引擎。在MySQL5.5中,默认存储引擎由MylSAM 变成了 ImioDB。任何历史遗留的应用程序都可能经历过这样的问 题,原本以为默认使用的MylSAM引擎现在变成了 InnoDB。


max—a I lowed 一 packet

可以用max_allowed_packet变量来定义SQL查询结果集的最

大值。增大这个值会允许查询返回更大的结果集。通过限制这个 变量的大小,你会得到一个潜在的指标来表明有一个查询返回了 很大的结果集,而这可能是无意义的。

sql—mode

MySQL支持一系列不同的服务器SQL模式。这些模式之间 区别很大,并且提供了更加符合美国国家标准学会(ANSI)的SQL 语法,也提供了默认预期的数据验证,并支持不同的mill和零日 期数据的管理方式。这些设置非常重要,因为它们能够改变SQL 语句的运行方式所带来的影响。

innodb—strict—mode

这个变量为InnoDB插件提供了 sql_mode功能,这个功能在 MySQL 5.1中是可选的,但现在在MySQL 5.5中已经是默认的 InnoDB实现了。这些选项扩展了原生的sql一mode,包含对表对 象的管理以及行检查功能。


6.4其他变量

那些并没有在本章讨论过但你也应该考虑做深入分析的 MySQL系统变量还包括下面这些:

concurrent_insert

foreign_key_checks

log_bin

maxJoin_size

maxseeks 一 for一key

minexamined_row 一 count

open 一 files 一 limit

optimizer_prune_level

optimizer search depth

sql一buffer一result

sql_select一limit

syncbinlog

thread一cache 一 size

thread 一 stack

tmpdir

tx_isolation

unique一checks

 

 

6.5本章小结

本章详细介绍了那些和本书的主要目的相关的最常用的 MySQL系统变量,这些变量可以帮助进行全面的SQL优化。除 此之外还有很多其他变量需要关注,尤其是那些能够影响到流行 的InnoDB存储引擎的DML性能优化的。请查阅MySQL参考手 册上给出的详细列表。

0 0
原创粉丝点击