Я работаю с довольно большой базой данных, в которой каждая строка имеет определенный класс. Каждый класс, в свою очередь, принадлежит обобщенному классу, который указан в отдельной таблице. Итак, чтобы найти обобщенный класс элемента, необходимо выполнить JOIN.Эффективное вычисление количества результатов по диапазону в сгруппированном SQL-запросе
Кроме того, один из столбцов содержит определенное числовое значение, например 'w'. Я пытаюсь найти эффективный запрос, который дает количество элементов в определенном диапазоне «w», сгруппированных по обобщенному классу. Так, например, одна из строк результата дал бы данные о количестве элементов в этом классе с ж < 500, 500 < < весом 1500 и ш> 1500.
Прямо сейчас, я использую уже существующий представление, которое уже объединяет обобщенный класс в результирующий набор, так что нет необходимости в JOIN в конечном запросе. Этот окончательный запрос использует трюк, который я нашел here, чтобы рассчитать количество элементов в определенном диапазоне.
SELECT generalized_class,
SUM(IF(w BETWEEN 1 AND 500, 1, 0)) AS low,
SUM(IF(w BETWEEN 500 AND 1500, 1, 0)) AS middle,
SUM(IF(w > 1500, 1, 0)) AS high
FROM table_vw
GROUP BY generalized_class
Однако я не совсем уверен, является ли это наиболее эффективным способом его осуществления. Поскольку база данных достаточно велика, для ее завершения требуется всего пять минут. Я полагаю, что вычисление такого рода вещей - дорогостоящая операция в целом, но мне просто интересно, могу ли я использовать другой подход, который бы удалял некоторую нагрузку. Кто угодно?
-edit- Определение точки зрения ничего особенного, это что-то вроде
CREATE VIEW table_vw AS SELECT d.id, d.class, c.generalized_class, <more fields>,
(w_high/w_low)/2 AS w
FROM base_table d
LEFT OUTER JOIN secondary_table c
ON (d.class = c.class)
Я уверен, что есть еще один левый внешнее соединение делается для другой таблицы, но нет строки из этой таблицы (как я уже сказал, это уже существовавший вид, поэтому в нем много материала, не предназначенного для этого запроса). Класс объединения «класс» индексируется только во вторичной таблице.
Каков запрос вида, который вы используете в настоящее время? Какова структура и индексы таблиц, к которым вы присоединяетесь, и что говорит текущий план объяснения? – Ben
Просьба изложить определения viwe и его основных таблиц. – Quassnoi