У меня есть несколько «контейнеров» в базе данных, каждая из которых содержит ноль или несколько элементов. Каждый элемент имеет имя, оценку, временную метку, представляющую ее, которая была добавлена в контейнер, и внешний ключ в идентификаторе контейнера.Порядок, группировка и фильтрация наборов результатов SQL
Я хочу получить все контейнеры, в которых верхний элемент имеет баллы 5 или больше (что подразумевает отказ от пустых контейнеров). Поскольку контейнеры действуют как стеки в этом экземпляре, элемент с наивысшим «добавленным временем» считается «верхним» элементом.
В настоящее время я использую следующий SQL:
SELECT * FROM (
SELECT name, container_id, score
FROM items
ORDER BY added_time DESC
) AS temptbl
GROUP BY container_id
HAVING score >= 5
Это, кажется, чтобы дать мне желаемые результаты, но это невероятно медленно, когда число элементов начинает увеличиваться - выполнение запроса на 8000 контейнеров и 10000 элементов занимает около 6 секунд на консоли MySQL, что слишком медленно. Я делаю что-то явно неэффективное?
Я не уверен, почему я буду использовать MAX (оценка) - Я хочу найти контейнеры, где верхний элемент имеет заданный балл. Другими словами, мне нужно найти верхний элемент для каждого контейнера, а затем отфильтровать те, которые не соответствуют критериям. – pwaring 2010-12-10 16:04:47