Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Есть таблица table1 date | state1 | state2 --------------------------------- 31/01/2005 | 1 | 2 31/03/2005 | 2 | 1 31/05/2005 | 2 | 2 31/07/2005 | 3 | 2 31/08/2005 | 1 | 2 31/01/2005 | 3 | 2 31/01/2005 | 1 | 4 данные столбцов state1 и state2 содержаться в таблице table2 и являются в ней ключом... Мне нужно вытащиться min(date) для каждого ключа из table2..... В таблице порядка 2-3 млн. записей и она продолжает расти.... Как сделать правильнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 11:22 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
1) Код: plaintext 1. 2. 3. 4. 5. 6. 2) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 3) Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 11:51 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Бабичев Сергей1) Код: plaintext 1. 2. 3. 4. 5. 6. 2) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 3) Код: plaintext 1. 2. 3. 4. 5. 6. 7. Пардон, речь ведь шла о MIN(date): 1) Код: plaintext 1. 2. 3. 4. 5. 6. 2) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 3) Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 11:53 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 12:33 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
To Mark.... Это первое, что пришло в голову....Только по быстродействию не проходит.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 12:45 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Я вот чего думаю... А нельзя как-нибудь хитро выдернуть из state1 и state2 уникальные значения.... Чтобы один прогон по table1, а в результате уникальный набор.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 12:48 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
TORTЯ вот чего думаю... А нельзя как-нибудь хитро выдернуть из state1 и state2 уникальные значения.... Чтобы один прогон по table1, а в результате уникальный набор....А можно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 12:56 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
А как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 13:02 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
А как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 13:05 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
TORTА как?А что в итоге на твоих тестовых данных должно получиться? TORTЕсть таблица table1 date state1 state231/01/2005 1 231/03/2005 2 131/05/2005 2 231/07/2005 3 231/08/2005 1 231/01/2005 3 231/01/2005 1 4 А то меня запрос от Mark Barinstein-а несколько ввел в ступор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 13:06 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
В итоге.... 1 | 31/01/2005 2 | 31/01/2005 3 | 31/01/2005 4 | 31/01/2005 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 13:10 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Попроще: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 13:21 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
To Mark: Это же почти select min(date), t2.id from table1 t1, table2 t2 where t1.state1 = t2.id or t1.state2 = t2.id group by t2.id Правильно? У меня получается это самый производительный вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 13:58 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
TORTTo Mark: Это же почти select min(date), t2.id from table1 t1, table2 t2 where t1.state1 = t2.id or t1.state2 = t2.id group by t2.id Правильно?Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 14:04 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Может есть еще идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 17:37 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Есть необходимость использовать результаты этого запроса в более емких запросах.... Может лучше на триггеры и отдельную таблицу? MQT - не проходит, куда еще капнуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 17:40 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
копнуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 17:40 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
TORTВ итоге.... 1 | 31/01/2005 2 | 31/01/2005 3 | 31/01/2005 4 | 31/01/2005Таки я решал не ту задачу :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 04:49 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
TORTкопнуть Код: plaintext 1. 2. 3. kak ideja... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:25 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
TORTЕсть необходимость использовать результаты этого запроса в более емких запросах.... Может лучше на триггеры и отдельную таблицу? MQT - не проходит, куда еще капнуть?По-моему , лучше сделать так: Сделайте Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 10:49 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Создайте индекс по id. А потом делайте Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 10:54 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Этакой конструкцией ни разу не пользовался... Это что-то от MQT??? Принцип действия такой же? БД сама будет рулить изменениями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 11:49 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
TORTЭто что-то от MQT??? Принцип действия такой же? БД сама будет рулить изменениями?Да. Ее "минус" в данном случае в том, что с помощью refresh immediate таблиц (т.е. таблиц, где изменения в базовых таблицах отражаются сразу) нельзя использовать min (max) функции. Но ее в данном случае можно использовать для конструирования таблицы типа Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 12:09 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
To Mark: Спасибо... В таком виде все получается гораздо оптимистичнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 15:05 |
|
||
|
Очередной запрос..... Поделитесь мыслями..
|
|||
|---|---|---|---|
|
#18+
Вернусь к этой теме... Задача та же, только таблица table1 немного изменилась date | state1 | state2 |shop_id --------------------------------- 31/01/2005 | 1 | 2 | 1 31/03/2005 | 2 | 1 | 1 31/05/2005 | 2 | 2 | 1 31/07/2005 | 3 | 2 | 2 31/08/2005 | 1 | 2 | 2 31/01/2005 | 3 | 2 | 2 31/01/2005 | 1 | 4 | 3 Соответсвенно постоянно нужны результаты запроса select min(date), t2.id, t1.shop_id from table1 t1, table2 t2 where t1.state1 = t2.id or t1.state2 = t2.id group by t2.id, t1.shop_id Но такой запрос весьма "тяжелый" по времени... Пробовал сделать MQT с refresh immediate, как советовал Mark, но тогда идет проседание на insert into table2..... Пробовал делать 2 MQT на state1 и state2, а потом вытаскивать минимум из обеих... Производительность также не устроила... Сейчас тестирую с триггером, который при изменении table1 пишет данные в table3(shop_id, state, min_date), так теперь лезут блокировки... Дело в том, что при 3 млн. записях в table1, получается в районе 600 тыс!!! записей в table3.... И никакие индексы не помогают.... Что делать-то?:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2008, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=34295870&tid=1604009]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 376ms |

| 0 / 0 |
