|
|
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Виноват, что отнимаю у вашего гения время, но ответьте, пожалуйста, один раз - мне этого хватит, запомню надолго ;-) Вопрос в следующем: существует таблица вида: артикул - время изменения - статус артикул - время изменения - статус ... артикул - время изменения - статус Мне нужно вытаскивать все поля записи с максимальным временем изменения с минимальным временем ожидания и нагрузкой на сервер. Единственное, до чего додумался (не бейте сильно) - работает ужасно долго (оно и понятно): Код: plaintext 1. 2. 3. 4. 5. 6. 7. Спасибо заранее за ваши советы и объяснения! Решпект! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 10:19 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
А план не можешь опубликовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 10:26 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
А если так попробовать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 10:29 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Неа, не катит... В среднем тянется на полчаса и тот и другой запрос. Удивительно. Но ведь выборка артикул, max(время изменения) выполняется мгновенно. Неужели нет способа выбрать все поля? План по вашему запросу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. План моего запроса: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 10:56 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
А индекс (артикул, время выполнения) есть ? Индекс 'tableindex_pk' что из себя представляет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 11:04 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
'tableindex_pk' содержит первые три поля: артикул, время изменения, статус. Отдельно по 'артикулу-времени изменения' индекса нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 11:12 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Странно, что в плане моего запроса нет NESTED LOOPS, что логично для соединения таблиц. А у тебя наоборот есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 11:30 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Странно. То ли я чего-то не так написал, то ли Oracle решил поменять план, но факт, при вторичном исполнении моего запроса Oracle выдал такой план: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Тем не менее, вопрос остаётся открытым: Как с минимальным временем ожидания выбрать все записи из таблицы, каждая из которых будет иметь максимальное значение по определенному полю (например, дата) среди прочих? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 12:25 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Я тут тоже попробовал малость... Вот таблица: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вот мой вариант запроса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А вот его план на моем 9.2.0.1.0: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. С виду все монстровидно, но на практике должно работать быстрее предложенных выше двух запросов, т.к. нет ни полного сканирования таблицы (softbuilder@inbox.ru), ни полного сканирования индекса (Eugg1e и softbuilder@inbox.ru) - используются куда более быстрые операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 12:26 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Пока думал и писал появилось несколько других ответов :) Может стоит перестроить индексы? Тогда и запрос будет шустрее работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 12:30 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Записей с одинаковым артикулом может быть несколько. Ваш запрос выберет их все, по-моему; т.е. будет выбрана вся таблица. Нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 12:45 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Да, именно! Тогда встречный вопрос: а что собственно требуется на выходе? Вариант 1. Результирующая выборка: артикул1 - время изменения - статус артикул2 - время изменения - статус ... артикул3 - время изменения - статус Условие выбора: все строки, в которых содержится максимальное время изменения, сгруппированные по артикулу. Вариант 2. Результирующая выборка: артикул - время изменения - статус артикул - время изменения - статус ... артикул - время изменения - статус Условие выбора: все строки, в которых содержится артикул, имеющий максимальное время изменения. Вариант 3. Результирующая выборка: артикул - время изменения - статус Условие выбора: строка, в которой содержится артикул, имеющий максимальное время изменения. Я понял, что требуется второй вариант. Похоже, что это не так. А как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 13:11 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
артикул - время изменения - статус , где артикул будет уникальным, а время изменения максимальным, то есть последним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 13:16 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, уточню: артикул1 - время изменения - статус артикул2 - время изменения - статус артикул3 - время изменения - статус ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 13:18 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 14:05 |
|
||
|
Запросик: вытащить записи с максимальным значением в поле
|
|||
|---|---|---|---|
|
#18+
Результат не удовлетворяет указанным требованиям. Выводятся все артикула, когда надо уникальные с последней датой модификации. Мимоходом: а нельзя уточнить каким образом работает over(partition by table)? Что это даёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 15:35 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32130085&tid=1991239]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
176ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 519ms |

| 0 / 0 |
