`

MySQL数据库优化的具体方法说明

阅读更多
以下的文章主要讲述的是实现MySQL数据库简单实用优化的具体方法,以及在实际操作中有哪些具体操作步骤是值得我们大家注意的。
以下的文章主要描述的是MySQL数据库简单实用优化的具体方法的实现,中包括如何定期的表进行分析与检查, 以及如何正确对表进行定期的优化,以下就是具体方案的描述,希望在你今后的学习中会有所帮助。

1、定期分析表和检查表

分析表的语法如下:
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name[, tbl_name]...

以上语句用于分析和存储表的关键字分布,分析的结果将可以使得系统得到准确的统计信息,使得SQL能够生成正确的执行计划。如果用户感觉实际执行计划并不是预期的执行计划,执行一次分析表可能会解决问题。在分析期间,使用一个读取锁定对表进行锁定。这对于MyISAM,DBD和InnoDB表有作用。

例如分析一个数据表
analyze table table_name


检查表的语法如下:

CHECK TABLE tb1_name[,tbl_name]...[option]...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}


检查表的作用是检查一个或多个表是否有错误,CHECK TABLE 对MyISAM 和 InnoDB表有作用,对于MyISAM表,关键字统计数据被更新

CHECK TABLE 也可以检查视图是否有错误,比如在视图定义中被引用的表不存在。


2. 定期优化表

优化表的语法如下:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name [,tbl_name]...


如果删除了表的一大部分,或者如果已经对含有可变长度行的表(含有 VARCHAR、BLOB或TEXT列的表)进行更多更改,则应使用OPTIMIZE TABLE命令来进行表优化。这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费,但OPTIMIZE TABLE 命令只对MyISAM、 BDB 和InnoDB表起作用。

例如: optimize table table_name


注意: analyze、check、optimize执行期间将对表进行锁定,因此一定注意要在MySQL数据库不繁忙的时候执行相关的操作。

常用的SQL优化

我们在开发的时候常常用到的SQL语句,无非是INSERT、GROUPBY等等。对于这些SQL语句,我们怎么进行优化?

1. 大批量插入数据

当用load命令导入数据的时候,适当的设置可以提高导入的速度。
对于MyISAM存储引擎的表,可以通过如下方式快速的导入大量的数据

ALTER TABLE tb1_name DISABLE KEYS;
loading the data
ALTER TABLE tb1_name ENABLE KEYS;

DISABLE KEYS 和 ENABLE KEYS 用来打开或者关闭MyISAM表非唯一索引的更新。在导入大量的数据到一个非空的MyISAM表时,通过设置这两个命令,可以提高导入的效率。
对于导入大量的数据到一个空的MyISAM表时,默认就是先导入数据然后才创建索引的,索引不用进行设置。
load data infile '/home/mysql/text_txt' into table text


对于InnoDB类型的表,这种方式不能提高导入数据的效率,但也有几种针对InnoDB类型的表进行优化的方式。

1. 因为InnoDB类型的表式按照主键的顺序保存的,所以将导入的数据按照主键的顺序排序,可以有效提高导入数据的效率。

2. 在导入数据前执行 SET UNIQUE_CHECKS=0,关闭唯一性校验,在导入结束后执行SET UNIQUE_CHECKS=1,恢复唯一性校验,可以提高导入的效率。

3. 如果应用使用自动提交的方式,建议在导入前执行SET AUTOCOMMIT=0,关闭自动提交,导入结束后执行SET AUTOCOMMIT=1,打开自动提交,也可以提高导入效率。

优化INSERT语句

当进行数据INSERT的时候,可以考虑采用以下几种方式进行优化

1. 如果同时从一个客户插入很多行,尽量使用多个值表的INSERT语句,这种方式将大大缩短客户端与MySQL数据库的链接、关闭等消耗,使得效率比分开执行的单个INSERT语句快.

例如:

insert into test values(1,2)
insert into test values(3,4)
insert into test values(5,6)

将上面三句改为:insert into test values(1,2),(3,4),(5,6)......

2. 如果从不同客户插入很多行,能通过使用INSERT DELAYED 语句得到更高的速度。

DELAYED 的含义是让INSERT 语句马上执行,其实数据都被放在内存的队列中,并没有真正写入磁盘,这比每条语句分别插入要快得多;LOW_PRIORITY刚好相反,在所有其他用户对表的读写完后才进行插入。

3. 将索引文件和数据文件分在不同的磁盘上存放

4. 如果进行批量插入,可以增加bulk_insert_buffer_size变量值的方法来提高速度,但是,这只能对于MyISAM表使用。

5. 当从一个文本文件中装载一个表时,使用LOAD DATA INFILE。 这通常比使用很多insert语句快20倍左右。

下面是mysql 性能优化的一些其它需要注意的地方,大家结合和,充分发挥mysql的性能。

以下的文章主要向大家描述的是MySQL数据库优化,SQL的实际操作步骤,我们讲述的是MySQL数据库优化,SQL的三步骤,以下就是这三步骤的具体操作的详细描述,望你浏览之后会对其有所收获。

MySQL数据库优化--SQL第一步:

1:磁盘寻道能力,以高速硬盘(7200转/秒),理论上每秒寻道7200次.这是没有办法改变的,优化的方法是----用多个硬盘,或者把数据分散存储.

2:硬盘的读写速度,这个速度非常的快,这个更容易解决--可以从多个硬盘上并行读写.

3:cpu.cpu处理内存中的数据,当有相对内存较小的表时,这是最常见的限制因素.

4:内存的限制.当cpu需要超出适合cpu缓存的数据时,缓存的带宽就成了内存的一个瓶颈---不过现在内存大的惊人,一般不会出现这个问题.

MySQL数据库优化--SQL第二步: (本人使用的是学校网站的linux平台(Linux ADVX.Mandrakesoft.com 2.4.3-19mdk ))

1:调节服务器参数

用shell>MySQL(和PHP搭配之最佳组合)d-help这个命令声厂一张所有MySQL(和PHP搭配之最佳组合)选项和可配置变量的表.输出以下信息:

possible variables for option--set-variable(-o) are:

back_log current value:5 //要求MySQL(和PHP搭配之最佳组合)能有的连接数量.back_log指出在MySQL(和PHP搭配之最佳组合)暂停接受连接的时间内有多少个连接请求可以被存在堆栈中

connect_timeout current value:5 //MySQL(和PHP搭配之最佳组合)服务器在用bad handshake(不好翻译)应答前等待一个连接的时间

delayed_insert_timeout current value:200 //一个insert delayed在终止前等待insert的时间

delayed_insert_limit current value:50 //insert delayed处理器将检查是否有任何select语句未执行,如果有,继续前执行这些语句

delayed_queue_size current value:1000 //为insert delayed分配多大的队

flush_time current value:0 //如果被设置为非0,那么每个flush_time 时间,所有表都被关闭

interactive_timeout current value:28800 //服务器在关上它之前在洋交互连接上等待的时间

join_buffer_size current value:131072 //用与全部连接的缓冲区大小

key_buffer_size current value:1048540 //用语索引块的缓冲区的大小,增加它可以更好的处理索引

lower_case_table_names current value:0 //

long_query_time current value:10 //如果一个查询所用时间大于此时间,slow_queried计数将增加

max_allowed_packet current value:1048576 //一个包的大小

max_connections current value:300 //允许同时连接的数量

max_connect_errors current value:10 //如果有多于该数量的中断连接,将阻止进一步的连接,可以用flush hosts来解决

max_delayed_threads current value:15 //可以启动的处理insert delayed的数量

max_heap_table_size current value:16777216 //

max_join_size current value:4294967295 //允许读取的连接的数量

max_sort_length current value:1024 //在排序blob或者text时使用的字节数量

max_tmp_tables current value:32 //一个连接同时打开的临时表的数量

max_write_lock_count current value:4294967295 //指定一个值(通常很小)来启动MySQL(和PHP搭配之最佳组合)d,使得在一定数量的write锁定之后出现read锁定

net_buffer_length current value:16384 //通信缓冲区的大小--在查询时被重置为该大小

query_buffer_size current value:0 //查询时缓冲区大小

record_buffer current value:131072 //每个顺序扫描的连接为其扫描的每张表分配的缓冲区的大小

sort_buffer current value:2097116 //每个进行排序的连接分配的缓冲区的大小

table_cache current value:64 //为所有连接打开的表的数量

thread_concurrency current value:10 //

tmp_table_size current value:1048576 //临时表的大小

thread_stack current value:131072 //每个线程的大小

wait_timeout current value:28800 //服务器在关闭它3之前的一个连接上等待的时间

根据自己的需要配置以上信息会对你帮助.

MySQL数据库优化--SQL第三:

1:如果你在一个数据库中创建大量的表,那么执行打开,关闭,创建(表)的操作就会很慢. 2:MySQL(和PHP搭配之最佳组合)使用内存

a: 关键字缓存区(key_buffer_size)由所有线程共享

b: 每个连接使用一些特定的线程空间.一个栈(默认为64k,变量thread_stack),一个连接缓冲区(变量net_buffer_length)和一个结果缓冲区(net_buffer_length).特定情况下,连接缓冲区和结果缓冲区被动态扩大到max_allowed_packet.

c:所有线程共享一个基存储器

d:没有内存影射

e:每个做顺序扫描的请求分配一个读缓冲区(record_buffer)

f:所有联结均有一遍完成并且大多数联结甚至可以不用一个临时表完成.最临时的表是基于内存的(heap)表

g:排序请求分配一个排序缓冲区和2个临时表

h:所有语法分析和计算都在一个本地存储器完成

i:每个索引文件只被打开一次,并且数据文件为每个并发运行的线程打开一次

j:对每个blob列的表,一个缓冲区动态的被扩大以便读入blob值

k:所有正在使用的表的表处理器被保存在一个缓冲器中并且作为一个fifo管理.

l:一个MySQL(和PHP搭配之最佳组合)admin flush-tables命令关闭所有不在使用的表并且在当前执行的线程结束时标记所有在使用的表准备关闭

3:MySQL(和PHP搭配之最佳组合)锁定表

MySQL(和PHP搭配之最佳组合)中所有锁定不会成为死锁. wirte锁定: MySQL(和PHP搭配之最佳组合)的锁定原理:a:如果表没有锁定,那么锁定;b否则,把锁定请求放入写锁定队列中

read锁定: MySQL(和PHP搭配之最佳组合)的锁定原理:a:如果表没有锁定,那么锁定;b否则,把锁定请求放入读锁定队列中

有时候会在一个表中进行很多的select,insert操作,可以在一个临时表中插入行并且偶尔用临时表的记录更新真正的表

max_tmp_tables current value:32 //一个连接同时打开的临时表的数量

max_write_lock_count current value:4294967295 //指定一个值(通常很小)来启动MySQL(和PHP搭配之最佳组合)d,使得在一定数量的write锁定之后出现read锁定

net_buffer_length current value:16384 //通信缓冲区的大小--在查询时被重置为该大小

query_buffer_size current value:0 //查询时缓冲区大小

record_buffer current value:131072 //每个顺序扫描的连接为其扫描的每张表分配的缓冲区的大小

sort_buffer current value:2097116 //每个进行排序的连接分配的缓冲区的大小

table_cache current value:64 //为所有连接打开的表的数量

thread_concurrency current value:10 //

tmp_table_size current value:1048576 //临时表的大小

thread_stack current value:131072 //每个线程的大小

wait_timeout current value:28800 //服务器在关闭它3之前的一个连接上等待的时间

根据自己的需要配置以上信息会对你帮助.
分享到:
评论

相关推荐

    MySQL 数据库优化的具体方法说明

    在本文中,我们将探讨一些简单的、实用的MySQL数据库优化方法。 首先,定期分析表(ANALYZE TABLE)是获取准确统计信息的关键步骤。通过分析,MySQL能够更好地理解表中的数据分布,从而制定出更有效的查询执行计划...

    mysql数据库开发文档

    MySQL 5.1是MySQL数据库管理系统的一个重要版本,在2008年发布。该版本在性能、可扩展性和安全性方面进行了显著改进,旨在为企业级应用提供更强大的支持。以下是MySQL 5.1的一些关键特性: #### 1. 性能增强 - **...

    MySQL数据库课程设计方法与实践指南

    内容概要:本文详细阐述了利用MySQL进行数据库课程设计的方法和步骤,涵盖需求分析、概念设计、逻辑设计、物理设计、数据库实现以及数据库测试与优化六个主要阶段。每一步都有具体的内容说明和技术实现手段。 适合...

    MySql数据库安装包.rar

    本文将详细讲解MySQL数据库的安装过程,主要针对提供的“MySQL数据库安装包.rar”进行说明。 首先,我们有两个文件:`mysql_workbench_jb5120190521081843` 和 `mysql-5.5.56-winx6420190521083505`。`mysql_...

    mysql数据库设计原则

    本文将深入探讨MySQL数据库设计的关键原则,包括但不限于索引的合理使用、SQL语句优化技巧等。 #### 二、索引使用原则 索引是提高数据检索速度的有效工具之一,但在实际应用中如何高效地利用索引却是一门艺术。 -...

    Mysql数据库设计标准

    MySQL数据库设计标准是确保数据一致性、可靠性和高效性的重要指南,它涵盖了多个方面,包括概念设计、...同时,文档《Mysql数据库设计标准.docx》应提供更具体的指导和案例,帮助设计人员更好地理解和实践这些原则。

    MySQL数据库有什么作用?举例说明具体运用MySQL数据库开发的过程.docx

    MySQL数据库是一种广泛使用的开源关系型数据库管理系统,它的主要作用在于高效、可靠地管理大量数据。在软件开发过程中,尤其是在网站开发、移动应用开发以及企业级软件开发中,MySQL扮演着至关重要的角色。 首先,...

    db转mysql数据库转换

    在IT行业中,数据库管理系统(DBMS)的选择往往...以上就是关于"db转mysql数据库转换"的一些关键知识点,实际操作中需根据具体工具和数据库情况进行适当调整。在进行任何数据库迁移时,谨慎和详尽的规划是至关重要的。

    Mysql数据库的优化

    ### MySQL 数据库优化详解 #### 一、引言 MySQL 是一种广泛使用的开源关系型数据库管理系统,因其高效、稳定及可扩展性而受到许多企业和开发者的青睐。然而,随着业务的发展,系统的负载会逐渐增大,这往往导致...

    解决CodeSmith不能读取MySql数据库字段说明的问题

    总的来说,解决CodeSmith无法读取MySql数据库字段说明的问题涉及多个方面,包括驱动程序的更新、连接字符串的正确配置、模板的优化以及错误排查。通过系统性的检查和尝试,通常能找出问题的症结并找到合适的解决方案...

    mysql数据库编程规范

    ### MySQL数据库编程规范详解 #### 第一部分 概述 ##### 1.1 背景 随着企业数据量的增长和业务复杂度的提高,统一的数据管理标准变得尤为重要。本规范旨在标准化MySQL数据库的设计、实现与维护流程,确保数据的...

    mysql中status状态说明

    根据status状态对Mysql数据库进行优化: 1、连接数  1.1 show variables like ‘max_connections’;  1.2、 show global status like ‘Max_used_connections’; 1.3、设置最大连接数值方法:    mysqld服务器...

    MySQL数据库项目的设计与实现方法详解.pdf

    本文详细介绍了创建MySQL数据库项目的完整流程,涵盖从需求分析到数据库维护的所有阶段。具体包括:需求分析、概念设计、逻辑设计、物理设计、实施、测试以及维护等步骤。每个阶段都有详细的解释和技术指导,旨在...

    高性能可扩展MySQL数据库设计及架构优化 电商项目

    标题“高性能可扩展MySQL数据库设计及架构优化 电商项目”指向了本文内容的核心目标——为电商项目建立一个既可以支撑高并发交易,又能灵活应对数据量增长的MySQL数据库系统。在进行数据库架构设计时,高性能和可...

    MySQL数据库安装说明书(root用户)

    ### MySQL数据库安装与管理知识点详解 #### 一、MySQL简介 - **定义**: MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现隶属于Oracle公司。 - **特性**: - 关系型数据库: 使用表格...

    windows 下 自动备份mysql数据库--按时间命名备份文件.docx

    本文档旨在介绍几种在 Windows 系统环境下自动备份 MySQL 数据库的方法,并着重讲解如何根据当前日期时间来命名备份文件,以实现更方便的数据管理和查询。通过三种不同的备份策略——复制数据文件、使用 `mysqldump`...

    php实现的MYSQL数据库备份工具

    通过阅读`MYSQL数据库备份工具使用说明.txt`,可以获取更详细的使用指导,包括如何配置备份参数,如何触发备份过程,以及如何下载和恢复备份文件。同时,检查源代码(如`default.php`和`backup.php`)可以帮助理解...

Global site tag (gtag.js) - Google Analytics