转自:http://www.iteye.com/topic/625074
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执行期间将对表进行锁定,因此一定注意要在数据库不繁忙的时候执行相关的操作。
常用的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语句,这种方式将大大缩短客户端与数据库的链接、关闭等消耗,使得效率比分开执行的单个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倍左右。
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
分享到:
相关推荐
《深入浅出-MySQL数据库开发、优化与管理维护》是一本专为IT专业人士设计的全面指南,涵盖了MySQL数据库从基础到高级的各个方面。这本书旨在帮助读者深入理解MySQL的内部机制,提升开发效率,优化数据库性能,并掌握...
MySQL数据库优化SQL篇PPT课件.pptx ...本PPT课件对MySQL数据库优化的重要知识点进行了详细的讲解,并提供了许多实用的优化技巧和方法。通过学习本PPT课件,可以提高数据库的性能和效率,提高开发效率和质量。
在树莓派上安装MySQL数据库是一项实用的技能,尤其对于那些想要在小型设备上搭建个人服务器或进行数据存储的用户。以下将详细讲解这个过程,包括安装、配置、使用MySQL的基本步骤。 首先,确保你的树莓派运行的是...
MySQL数据库练习题50道.pdf 本资源为MySQL数据库练习题,共50道题,涵盖数据库设计、数据表创建、数据插入、查询等多方面的知识点。下面是对该资源的详细知识点总结: 一、数据库设计 * 数据库设计是指根据具体的...
MySQL到SQL Server转换工具包是针对数据库管理员和开发人员的一款实用工具,它的主要功能是将MySQL数据库结构和数据无缝地迁移到SQL Server环境中。这样的转换对于那些需要在不同数据库系统间进行迁移或整合项目的...
本课件"mysql数据库基础全部课件"旨在为初学者提供一个全面且实用的学习资源,帮助大家快速掌握MySQL的基础知识。 一、MySQL概述 1. MySQL的起源与发展:了解MySQL的诞生背景,发展历程以及其在当前互联网环境中的...
这个"简单实用的php mysql数据库连接类"提供了一种高效的方法来管理和操作数据库,无需编写大量的重复代码。让我们深入了解一下这个类的核心知识点以及如何在实际项目中应用。 首先,我们来探讨PHP与MySQL数据库的...
Navicat 8.2.12 For MySQL是一款专业且功能强大的MySQL数据库管理和开发工具,专为MySQL数据库设计,提供了一站式的解决方案,使用户能够高效地进行数据库管理、开发和协作。它支持多种操作系统平台,包括Windows、...
《深入浅出 MySQL 数据库开发优化与管理维护》是一本专为MySQL爱好者和专业人士准备的指南,旨在帮助读者深入理解MySQL的各个方面,并提供实用的优化和管理策略。MySQL作为世界上最受欢迎的关系型数据库管理系统之一...
"mysql数据库备份工具"就是这样一个实用程序,它简化了数据库备份的过程,让用户无需通过专业的MySQL客户端工具就能执行备份任务。 这款绿色版的MySQL数据库备份工具具有便携性,无需安装即可使用,大大提高了备份...
总之,“从sqlserver同步数据到Mysql数据库”的实例是一个实用的数据库管理技能,对于数据库管理员和开发者来说,掌握这种技能能提高在多数据库环境下的工作效率。通过实践和学习,可以深入了解不同数据库系统的特性...
"云平台开发技术人员MySQL数据库知识参考手册实用" 这份文档是为云平台开发技术人员提供的 MySQL 数据库知识参考手册,旨在为开发人员提供详细的 MySQL 数据库知识指导。文档从实践角度出发,结合部分实践示例,从...
MySQL数据库系统设计实现与管理是数据库领域的一门重要课程,主要涵盖了数据库的基础理论、设计方法、实施技巧以及管理策略。第六版的教材深入浅出地介绍了MySQL这一流行的开源关系型数据库管理系统,为学习者提供了...
MySQLreport 是一个基于命令行的开源工具,用于监控 MySQL 数据库的状态和性能。它通过收集并格式化 MySQL 的系统变量和状态信息,提供了一个简洁的报告,帮助管理员了解数据库的运行情况。虽然不支持实时刷新,但...
MySQL GUI Tools是一款强大的图形用户界面工具集合,专为MySQL数据库管理系统设计,旨在简化数据库的管理和优化。这款工具集包括了多种实用工具,如MySQL Workbench、MySQL Query Browser、MySQL Administrator等,...
MySQL数据库软件是世界上最受欢迎的开源关系型数据库管理系统之一,由Oracle公司维护。它以其高效、稳定和易用性而受到广大开发者的青睐。本套教程将带你深入理解MySQL的各个方面,从基础安装到实际操作,让你能够...
在这种情况下,`mysqlcheck.exe`工具就显得尤为重要,它是MySQL提供的一种实用程序,专门用于检查、修复、优化和分析MySQL数据库中的表。 `mysqlcheck.exe`是一个命令行工具,它能够执行多种功能,包括: 1. **...
MySQL数据库可视化界面是数据库管理员和开发人员常用的工具,它提供了直观的图形化界面来管理和操作MySQL数据库。SQLyog Community是这样一个免费的汉化版本,它使得非英语为母语的用户也能方便地使用,无需深入理解...
MySQL数据库是世界上最受欢迎的开源关系型数据库之一,广泛应用于各种规模的企业和项目中。SQLyog,作为一款强大的MySQL管理工具,是许多数据库管理员和开发者的首选,尤其在远程连接MySQL数据库时,它表现得尤为...