`pc`.`pc_id`,
`concept`.`concept_text`,
`conceptclass`.`conceptclass_name`,
`pc`.`pc_count_document`,
`pc`.`pc_count_sentence`
FROM `pc`
INNER JOIN `concept` USING (`concept_id`)
INNER JOIN `conceptclass` USING (`conceptclass_id`)
WHERE
`concept`.`concept_text` REGEXP BINARY '[[:<:]]form\-data[^[:space:]]*$' AND
`pc`.`project_id` = 1
ORDER BY
`pc`.`pc_count_sentence` DESC
LIMIT 100
Query 1: main query
Так вот. Скорость исполнения запроса обратно пропорциональна объёму выборки. Если под регэксп попадёт много concept.concept_text, то запрос выполнится за миллисекунды. Но если запись одна, то он барабанит 7 секунд. Cardinality: 2519372 (q2)
select count(*)
from pc
where
project_id = 1
Query 2: cardinality
Всё веселье? Ни разу. Берём другой pc.project_id = 10: Cardinality: 6525 (q2)
Исполняем q1 — исполняется менее, чем за 1 мс
а что не так? в первом случае мы 100 нужных записей набираем быстро. во втором нужно просмотреть весь результат джойна 3-х таблиц, чтобы найти всего одну, которая удовлетворяет условию
Обсуждают сегодня