Оптимизация запросов выбора Sql

#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) будет полезен.