Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
простой вопрос про select
|
|||
|---|---|---|---|
|
#18+
непонятно в какой форум писать, поэтому напишу сюда, так как всё нижеописанное происходит под управленим постгре. задача на первый взгляд простая. есть большая таблица, под миллиард записей убрав все лишнее ее можно представить в виде Код: plaintext 1. 2. 3. 4. 5. 6. то есть здесь хранятся пары данных число-текст по этой таблице нужно делать выборку следующего вида: выбрать первые 10 значений numvalue для которых есть пара с текстом 'текст1' а также есть пара с текстом 'текст2', а также есть пара 'текст3' и т.д. вопрос стоит в том, чтобы сделать этот запрос самым бытрым способом. самое тупое решение в лоб через intersect работает только в том случае, когда искомых значений в таблице очень мало, в остальных случаях оно безбожно тормозит так как делает выборку по всей таблице: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. второе решение, которое приходит в голову это делать запросы вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. оно работает гораздо быстрее первого но все равно, если значение 'текст1' часто встречается в таблице, запрос работает слишком долго. в итоге я пока остановился вот на таком решении: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. по тестам оно работает быстрее предыдущего запроса, но тоже начинает очень тормозить когда количество условий становится заметно больше трёх. В общем мне хотелось бы услышать ваши мысли - как можно еще сделать подобную выборку чтобы это было максимально быстро? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2008, 15:52 |
|
||
|
простой вопрос про select
|
|||
|---|---|---|---|
|
#18+
untitled... безбожно тормозит ... ... работает слишком долго ... ... начинает очень тормозить ...показывайте EXPLAIN ANALYZE этих запросов попробуйте при наличии индекса по (textvalue,numvalue) запрос select numvalue from bigtable a join bigtable b using (numvalue) join bigtable c using (numvalue) where a.textvalue='текст1' and b.textvalue='текст2' and c.textvalue='текст3' order by numvalue limit 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2008, 16:42 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35206353&tid=2004506]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 355ms |

| 0 / 0 |
