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

MySQL数据库优化(四)

 2008-06-12 11:07:59 来源:WEB开发网   
核心提示: 对于小表来说,全表扫描通常更合适,MySQL数据库优化(四)(5),但是对大表来说,尝试使用以下技术来避免让优化程序错误地选择全表扫描:执行 ANALYZE TABLE tbl_name 更新要扫描的表的索引键分布, 对 MyISAM 而言,可以在 SELECT 语句正在运行时插入记录,

对于小表来说,全表扫描通常更合适。但是对大表来说,尝试使用以下技术来避免让优化程序错误地选择全表扫描:

执行 ANALYZE TABLE tbl_name 更新要扫描的表的索引键分布。

使用 FORCE INDEX 告诉MySQL,做全表扫描的话会比利用给定的索引更浪费资源。

  SELECT*FROMt1,t2FORCEINDEX(index_for_column)
  WHEREt1.col_name=t2.col_name;

启动 mysqld 时使用参数 --max-seeks-for-key=1000 或者执行 SET max_seeks_for_key=1000 来告诉优化程序,所有的索引都不会导致超过1000次的索引搜索。请查看章节"5.2.3 Server System Variables"。

4 加速 INSERT

插入一条记录花费的时间由以下几个因素决定,后面的数字大致表示影响的比例:

连接:(3)

发送查询给服务器:(2)

解析查询:(2)

插入记录:(1 x 记录大小)

插入索引:(1 x 索引数量)

关闭:(1)

这里并没有考虑初始化时打开数据表的开销,因为每次运行查询只会做这么一次。

如果是 B-tree 索引的话,随着索引数量的增加,插入记录的速度以 log N 的比例下降。

可以使用以下几种方法来提高插入速度:

如果要在同一个客户端在同一时间内插入很多记录,可以使用 INSERT 语句附带有多个 VALUES 值。这种做法比使用单一值的 INSERT 语句快多了(在一些情况下比较快)。如果是往一个非空的数据表里增加记录,可以调整变量 bulk_insert_buffer_size 的值使之更快。

如果要从不同的客户端中插入大量记录,使用 INSERT DELAYED 语句也可以提高速度。

对 MyISAM 而言,可以在 SELECT 语句正在运行时插入记录,只要这时候没有正在删除记录。

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

Tags:MySQL 数据库 优化

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