分类目录归档:mysql/sql

MySQL的optimize的效果太震惊了

今天写的一个页面,用的AJAX,但是总是感觉很慢,查看了一下消耗的时间,600ms左右,太长了,有明显的延迟感。不能这样发布啊,太慢了,于是找哪块消耗的时间最长,发现后台的一条的SQL语句很慢,大概500多ms,但是看上去那条SQL语句不会消耗太多的时间,于是想着想优化表结构,设置索引,正在想要不要做额外的索引的时候,突然想到尝试一下optimize试试看。结果用来之后,时间只有40多ms了,一下子就没有那种延迟感了,效果很明显。 回来后在网上查了一下,有段对optimize的描述: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] … 如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改, 则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。 您可以使用OPTIMIZE TABLE来重新 利用未使用的空间,并整理数据文件的碎片。 在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次 即可,只对特定的表运行。 OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。 注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。 因为我那个表,里面有VARCHAR字段,而且,那个表是分了三步生成的,后期有大量的update操作,所以optimize后效果很明显。

发表在 mysql/sql | 留下评论

Mysql在插入一条记录后返回这条记录的ID值的方法。

Mysql提供了一个LAST_INSERT_ID()的函数。 LAST_INSERT_ID() (with no argument) returns the first automatically generated value that was set for an AUTO_INCREMENT column by the most recently executed INSERT or UPDATE statement to affect such a column. For example, after inserting a row that generates … 继续阅读

发表在 mysql/sql | 标签为 , | 留下评论