У меня есть таблица скромного размера, 277 тыс. записей на данный момент, которую я пытаюсь выполнить FULLTEXT
. Поиск кажется очень быстрым, пока он не дойдет до фазы отправки данных.
Таблица:
CREATE TABLE `sqinquiries_inquiry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ts` datetime NOT NULL,
`names` longtext NOT NULL,
`emails` longtext NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `sqinquiries_inquiry_search` (`names`,`emails`)
) ENGINE=MyISAM AUTO_INCREMENT=305560 DEFAULT CHARSET=latin1
Запрос:
SELECT * FROM `sqinquiries_inquiry` WHERE (
MATCH (`sqinquiries_inquiry`.`names`) AGAINST ('smith' IN BOOLEAN MODE) OR
MATCH (`sqinquiries_inquiry`.`emails`) AGAINST ('smith' IN BOOLEAN MODE)
) ORDER BY `sqinquiries_inquiry`.`id` DESC LIMIT 100
Профиль: (я вырезал, казалось бы, бесполезную информацию)
+-------------------------+----------+
| Status | Duration |
+-------------------------+----------+
| preparing | 0.000014 |
| FULLTEXT initialization | 0.000015 |
| executing | 0.000004 |
| Sorting result | 0.000008 |
| Sending data | 2.247934 |
| end | 0.000011 |
| query end | 0.000003 |
+-------------------------+----------+
DESCRIBE
выглядит великолепно, просто один лайнер:
Опишите:
id: 1
select_type: SIMPLE
table: sqinquiries_inquiry
type: index
possible_keys: NULL
key: PRIMARY
key_len: 4
ref: NULL
rows: 100
Extra: Using where
Так что я не понимаю, откуда взялось 2.25 секунд данных отправки? Я вижу подобную производительность в Python и в консольном приложении mysql
, оба подключаются к localhost
.
Обновление:
- За комментарий, запрашивающий средний размер строки, это: 53.8485
- За комментарий здесь находится
DESCRIBE
.