WEB开发网
开发学院数据库MySQL MySQL查询优化系列讲座之数据类型与效率 阅读

MySQL查询优化系列讲座之数据类型与效率

 2006-04-06 10:43:37 来源:WEB开发网   
核心提示: 使用mysqldump的时候要避免使用--complete-insert选项;它生成的INSERT语句是每个数据行一条语句的,语句总共会很长,MySQL查询优化系列讲座之数据类型与效率(7),比多行语句需要的分析操作更多,· 如果你必须使用INSERT语句,你就必须使用--m

使用mysqldump的时候要避免使用--complete-insert选项;它生成的INSERT语句是每个数据行一条语句的,语句总共会很长,比多行语句需要的分析操作更多。

· 如果你必须使用INSERT语句,那么在可能的情况下,对它们进行分组以减少索引的刷新。对于事务性的存储引擎,在单个事务中提交,而不是在自动提交(autocommit)模式下提交INSERT语句可以实现这样的功能:

START TRANSACTION;
INSERT INTO tbl_name ... ;
INSERT INTO tbl_name ... ;
INSERT INTO tbl_name ... ;
COMMIT;

对于非事务性的存储引擎,获取数据表上的写入锁,它被锁定的时候提交INSERT语句:

LOCK TABLES tbl_name WRITE;
INSERT INTO tbl_name ... ;
INSERT INTO tbl_name ... ;
INSERT INTO tbl_name ... ;
UNLOCK TABLES;

无论采用哪种方法,你得到的好处都是相同的:索引在所有的语句都被执行之后才刷新一次,而不是每个INSERT语句刷新一次索引。后面介绍了在自动提交模式下或数据表没有被锁定的时候发生的情况。

· 对于MyISAM数据表,减少索引刷新的另外一个策略是使用DELAYED_KEY_WRITE表选项。使用这个选项的时候,数据行会像平常一样立即写入数据文件中,但是键缓存只是偶尔刷新一次,而不是在每次插入操作之后都需要刷新。如果要在服务器上全面地使用延迟索引刷新,那么就需要使用--delay-key-write选项来启动mysqld。在这种情况下,每个数据表的索引块写入操作都会被延迟,直到这些数据块必须为其它的索引值提供空间、或者执行了FLUSH TABLES命令、或者数据表被关闭的时候才执行操作。

如果你选择了对MyISAM数据表使用延迟键写入,那么不正常的服务器关闭可能会引起索引值的丢失。这不是致命的问题,因为MyISAM索引可以依据数据行来进行修复,但是如果想让修复过程出现,你就必须使用--myisam-recover=FORCE选项来启动服务器。这个选项会使服务器在打开MyISAM数据表的时候检查它们,如果有必要就自动地修复它们。

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

Tags:MySQL 查询 优化

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