Sql选择查询优化

时间:2011-11-01 10:56:44

标签: mysql sql optimization

我有一张桌子,其结构如下:

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'.


如果有可能,您是否也可以解释一下查询下面发生了什么?(我的意思是,可能影响最终算法复杂性的事情)

2 个答案:

答案 0 :(得分:3)

我认为是

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 :(得分: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'
      )

(type, value)(对于InnoDB表)或(type, value, PK)(对于MyISAM表)的索引将非常有用。