Question

My table is simple:

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

And it only contains 180 rows:

mysql> select count(*) from od_form_items; +----------+ | count(*) | +----------+ | 180 | +----------+ 1 row in set (0.00 sec)

The longest string is just 26314 bytes:

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)

But in mysql slow_log, it took over 2 seconds to select all records:

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)

How should I optimize it? What mysql parameter should I check? Thanks!

Était-ce utile?

La solution

On an ordinary spinning drive, you can get about 100 IOPs. If all 180 rows needed to reach off-row to get items and none needed for template, then that is 180 + miscellany to get SELECT * 180 times. That's about 2 seconds.

SSD drives would be faster.

Compressing, in the client, those two columns, then storing them in BLOBs, would shrink things a bunch. This would probably lead to fewer IOPs.

It seems like populating memcached would be a one-time action, so the 2 seconds would not be a big deal?

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top