#mysql #sql #optimization
#mysql #sql #оптимизация
Вопрос:
У меня есть таблица, и она структурирована следующим образом:
CREATE TABLE `table` (
`type` int(11) NOT NULL,
`value` int(11) NOT NULL,
Some additional fields
KEY `type` (`type`)
)
Каков наиболее эффективный способ написать следующий запрос: Select the item with the maximal value of some certain type, let's say 'type0'.
Если это возможно, не могли бы вы также объяснить, что происходит под запросом (я имею в виду, что-то, что может повлиять на результирующую алгоритмическую сложность).
Ответ №1:
Я думаю, что это
SQL Server:
SELECT TOP 1 *
FROM 'table'
WHERE type = 'type0'
ORDER BY 'value' DESCENDING
MySQL:
SELECT *
FROM 'table'
WHERE type = 'type0'
ORDER BY 'value' DESC
LIMIT 1
Я думаю. Наиболее важной частью является то, что у вас есть индекс как для «типа», так и для «значения»
Спасибо @Andrew за указание, что он запрашивает MySQL. Приветствия.
Комментарии:
1. Он помечен как mysql, поэтому используйте LIMIT 1 в конце, а не TOP 1
2. Добавление индексов необязательно. Это снизит производительность вставок, обновлений и удалений, поэтому необходимо оценивать, исходя из того, сколько строк вы ожидаете, как часто вы будете запускать этот запрос и как часто обновляется таблица.
Ответ №2:
Поиск только одной строки (с максимальным значением):
SELECT *
FROM tableX
WHERE type = 'type0'
ORDER BY value DESC
LIMIT 1
Поиск всех строк с одинаковым (максимальным) значением:
SELECT *
FROM tableX
WHERE type = 'type0'
AND value =
( SELECT MAX(value)
FROM tableX
WHERE type = 'type0'
)
И индекс on (type, value)
(для таблицы InnoDB) или on (type, value, PK)
(для таблицы MyISAM) будет полезен.