MySQL手册版本 5.0.20-MySQL优化(四) (1)(4)

2016-01-29 13:46 3 1 收藏

MySQL手册版本 5.0.20-MySQL优化(四) (1)(4),MySQL手册版本 5.0.20-MySQL优化(四) (1)(4)

【 tulaoshi.com - PHP 】

可以在锁表后,一起执行几个语句来加速 INSERT 操作:

LOCK TABLES a WRITE;

INSERT INTO a VALUES (1,23),(2,34),(4,33);

INSERT INTO a VALUES (8,26),(6,29);

UNLOCK TABLES;

这对性能提高的好处在于:直到所有的 INSERT 语句都完成之后,索引缓存一次性刷新到磁盘中。通常情况是,多有少次 INSERT 语句就会有多数次索引缓存刷新到磁盘中的开销。如果能在一个语句中一次性插入多个值的话,显示的锁表操作也就没必要了。对事务表而言,用 BEGIN/COMMIT 代替 LOCK TABLES 来提高速度。锁表也回降低多次连接测试的总时间,尽管每个独立连接为了等待锁的最大等待时间也会增加。例如:

Connection 1 does 1000 inserts

Connections 2, 3, and 4 do 1 insert

Connection 5 does 1000 inserts

如果没有锁表,则连接2,3,4会在1,5之前就做完了。如果锁表了,则连接2,3,4可能在1,5之后才能完成,但是总时间可能只需要40%。MySQL的 INSERT, UPDATE, DELETE 操作都非常快,不过在一个语句中如果有超过5个插入或者更新时最好加锁以得到更好的性能。如果要一次性做很多个插入,最好是在每个循环(大约1000次)的前后加上 LOCK TABLES 和 UNLOCK TABLES,从而让其他进程也能访问数据表;这么做性能依然不错。INSERT 总是比 LOAD DATA INFILE 插入数据来得慢,因为二者的实现策略有着分明的不同。

想要让 MyISAM 表更快,在 LOAD DATA

INFILE 和 INSERT 时都可以增加系统变量 key_buffer_size 的值,详情请看"7.5.2 Tuning Server Parameters"。

7.2.13 加速 UPDATE

UPDATE 语句的优化和 SELECT 一样,只不过它多了额外的写入开销。写入的开销取决于要更新的记录数以及索引数。如果索引没有发生变化,则就无需更新。

另一个提高更新速度的办法是推迟更新并且把很多次更新放在后面一起做。如果锁表了,那么同时做很多次更新比分别做更新来得快多了。

注意,如果是在 MyISAM 表中使用了动态的记录格式,那么记录被更新为更长之后就可能会被拆分。如果经常做这个,那么偶尔做一次 OPTIMIZE TABLE 就显得非常重要了。详情请看"14.5.2.5 OPTIMIZE TABLE Syntax"。

7.2.14 加速 DELETE

删除单个记录的时间和它的索引个数几乎成正比。想更快地删除记录,可以增加索引键的缓存。详情请看"7.5.2 Tuning Server Parameters"。

如果想要删除数据表的所有记录,请使用 TRUNCATE TABLE tbl_name 而不是 DELETE FROM tbl_name。详情请看"14.1.9 TRUNCATE Syntax"。

7.2.15 其他优化点子

本章节列出了一些改善查询处理速度的其他点子:

使用永久连接到数据库,避免连接的开销。如果需要初始化很多连接,而又不能用永久连接,那么可以修改变量 thread_cache_size 的值,详情请看"7.5.2 Tuning Server Parameters"。

总是检查查询是否利用了表中已有的索引。在MySQL中,可以用 EXPLAIN 语句来分析。详情请看"7.2.1 EXPLAIN Syntax (Get Information About a SELECT)"。

尽量不要在经常需要更新的 MyISAM 表上用太过复杂的 SELECT 语句,这是为了避免在读和写之间争夺锁。

在 MyISAM 表中,如果没有正在删除记录,则可以在其他查询正在读取数据的同时插入记录。如果这种情况十分重要,那么就要尽量在表没有删除记录时才使用表。另一个可能的办法就是在删除一大堆记录之后执行 OPTIMIZE TABLE 语句。

如果总是需要按照 expr1, expr2, ... 的顺序取得记录,那么请使用 ALTER TABLE ... ORDER BY expr1, expr2, ... 修改表。通过这种方法扩充修改表之后,就可能获得更高的性能表现。

在一些情况下,让一个字段类型是 ``hashed

来源:http://www.tulaoshi.com/n/20160129/1491435.html

延伸阅读
标签: MySQL mysql数据库
7 MySQL 优化 数据库优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解才行。尽管对系统或应用系统的了解不多的情况下优化效果还不错,但是如果想优化的效果更好,那么就需要对它了解更多才行。 本章主要讲解了几种优化MySQL的方法,并且给出了例子。记着,总有各种办法能让系统运行的更快,当然了,这需要更多的努力。 7....
标签: PHP
6 MySQL 同步 同步功能在MySQL 3.23.15就开始引进了,它可以把一个MySQL服务器上的数据复制到另一个服务器上去。本章描述了MySQL的各种复制特性。介绍了同步的概念,如何设置同步服务器,以及可用服务器的参照。还提供了一系列的常见问题及其答案,疑难解答。 "14.6 Replication Statements"中介绍了同步相关的SQL语句语...
标签: PHP
6.5 不同 MySQL 版本之间的同步兼容性 最早的二进制格式是在MySQL 3.23中开发出来的。在MySQL 4.0中改进了,MySQL 5.0又改进了。在配置同步时需要升级服务器的话,它们之间的因果关系在"6.6 Upgrading a Replication Setup"中描述了。 如果只关心同步,任何MySQL 4.1.x版本和MySQL 4.0.x是一样的,因为它们都使用...
标签: PHP
6.4 设置同步 以下描述了如何快速设置 MySQL 同步服务器。假设你打算同步全部的数据库,并且之前没有设置过。需要关闭master服务器以完成全部的步骤。 本章描述的过程可以用于一个slave的情况,也可以用于多个slave的情况。 这只是一个最直接设置slave的办法,并不是只有一个。例如,已经有了master的数据快照...
4.6 管理员的优化 前面各段介绍了普通的MySQL用户利用表创建和索引操作,以及利用查询的编写能够进行的优化。不过,还有一些只能由MySQL管理员和系统管理员来完成的优化,这些管理员在MySQL服务器或运行MySQL的机器上具有控制权。有的服务器参数直接适用于查询处理,可将它们打开。而有的硬件配置问题直接影响查询处理速度,应该对它...

经验教程

811

收藏

21
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部