WEB开发网
开发学院数据库MySQL MySQL数据库优化(四) 阅读

MySQL数据库优化(四)

 2008-06-12 11:07:59 来源:WEB开发网   
核心提示: 这对性能提高的好处在于:直到所有的 INSERT 语句都完成之后,索引缓存一次性刷新到磁盘中,MySQL数据库优化(四)(7),通常情况是,多有少次 INSERT 语句就会有多数次索引缓存刷新到磁盘中的开销,如果经常做这个,那么偶尔做一次 OPTIMIZE TABLE 就显得非常重要了,如

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

  Connection1does1000inserts
  Connections2,3,and4do1insert
  Connection5does1000inserts

如果没有锁表,则连接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 的值。

5 加速 UPDATE

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

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

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

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:MySQL 数据库 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接