我的桌子很简单:
CREATE TABLE `od_form_items` ( `id` int(11) NOT NULL AUTO_INCREMENT, `formid` int(11) DEFAULT NULL, `items` mediumtext, `template` mediumtext, `draftid` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=420 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT
而且它只包含180行:
mysql> select count(*) from od_form_items; +----------+ | count(*) | +----------+ | 180 | +----------+ 1 row in set (0.00 sec)
最长的字符串只是26314字节:
mysql> select length(items) as a from qiban.od_form_items order by a desc limit 1; +-------+ | a | +-------+ | 26314 | +-------+ 1 rows in set (0.01 sec) mysql> select length(template) as a from qiban.od_form_items order by a desc limit 1; +------+ | a | +------+ | 6556 | +------+ 1 rows in set (0.01 sec)
但是在mysql slow_log中,选择所有记录占用了2秒:
mysql> select start_time, query_time, sql_text from mysql.slow_log order by start_time desc limit 10; +---------------------+------------+--------------------------------------------+ | start_time | query_time | sql_text | +---------------------+------------+--------------------------------------------+ | 2017-11-24 10:34:40 | 00:00:02 | SELECT * FROM `od_form_items` +---------------------+------------+--------------------------------------------+ 1 rows in set (0.01 sec)
我应该如何优化它?我应该检查哪些mysql参数?谢谢!
发布于 2017-11-24 20:13:33
在一个普通的旋转驱动器上,你可以得到大约100个IOPs。如果所有的180行都需要离开行以获得items,而template则不需要任何行,那么就需要180 +混合才能得到SELECT * 180次。那大约是2秒。
SSD驱动器会更快。
在客户机中,压缩这两列,然后将它们存储在BLOB中,就会缩小一些东西。这可能会导致IOP减少。
似乎填充memcached是一次性的动作,那么2秒就不是什么大事了?
https://dba.stackexchange.com/questions/191639
复制相似问题