http://www.ttlsa.com/mysql/mysql-innodb-storage-engine-parameters-detailed-and-optimization/
ql_cache意思是说,查询的时候使用缓存。
sql_no_cache意思是查询的时候不适用缓存。
sql_buffer_result意思是说,在查询语句中,将查询结果缓存到临时表中。
这三者正好配套使用。sql_buffer_result将尽快释放表锁,这样其他sql就能够尽快执行。
使用 --------------------------------------------------
那么MySQL到底是怎么决定到底要不要把查询结果放到查询缓存中呢?
是根据query_cache_type这个变量来决定的。
这个变量有三个取值:0,1,2,分别代表了off、on、demand。
意思是说,如果是0,那么query cache 是关闭的。如果是1,那么查询总是先到查询缓存中查找,除非使用了sql_no_cache。如果是2,那么,只有使用 sql_cache的查询,才会去查询缓存中查找
--------------
对于myisam引擎的表,可以使用optimize table tb_name来进行空间优化。
对于innodb引擎,可使用下列方法:
1、innodb 的optimize table 是映射到alter table的,做大innodb表优化前先drop掉所有的index,然后optimize 完了再rebuild index.速度要快很多。
2、对于使用独立表空间的innodb表,表比较小的可以ALTER TABLE table_name ENGINE = Innodb;表比较大的话,新创建一个表,把数据倒进去然后drop原来表。
-------------------------------------------------------------------------------------------------
ENGINE = Innodb;
这其实是一个NULL操作,表面上看什么也不做,实际上重新整理碎片了。当执行优化操作时,实际执行的是一个空的 ALTER 命令,但是这个命令也会起到优化的作用,它会重建整个表,删掉未使用的空白空间。
OPTIMIZE 可以整理数据文件,并重排索引。【据说仅针对myisam有效】