我有一张桌子,其结构如下:
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'.
如果有可能,您是否也可以解释一下查询下面发生了什么?(我的意思是,可能影响最终算法复杂性的事情)。
答案 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表)的索引将非常有用。