Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Количество условий в одном запросе 
:(
    Опции темы
Gold Dragon
Дата 23.7.2012, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Есть запрос
Код


SELECT aaa, bbb 
FROM ccc 
WHERE aaa = 'b1' 
    AND aaa = 'b2'
    AND aaa = 'b3'
    ......
    AND aaa = 'bххх'


Как сильно зависит скорость и память если в одном запросе будет, например, сотня-две условий? Не умрёт ли БД? Что вообще может произойти?

Или лучше выполнять по одному запросу?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Бонифаций
Дата 23.7.2012, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Это вот вывод crash-me для mysql 4.1. С тех пор надо полагать некоторые лимиты увеличились, но общую картину оценить можно и по этим данным.
Конкретно по поводу Вашего запроса, максимальное число условий в where  это видимо результат max_conditions, который 85660 . И как видите при превышении этого параметра база не падает, а просто возвращает ошибку.

По поводу скорости, я не думаю что вы выиграете путем посылки N запросов вместо одного такого.

Кстати, а как такое может быть, что aaa='b1' и одновременно aaa='b2' и т.д. Может должен быть OR вместо AND? Если OR, тогда проще сделать  where aaa in ('b1','b2','b3',....'bn');


Цитата

max_big_expressions=10                  # big expressions
   ###We are trying (example with N=5):
   ###select 0+(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+...(8168)
   ### 50:FAIL 10:OK 30:FAIL 14:FAIL 11:FAIL
max_char_size=1048543                   # max char() size
   ###We are trying (example with N=5):
   ###create table crash_q (q char(5))
   ###insert into crash_q values ('aaaaa')
   ###select * from crash_q
   ### 524287:OK 786431:OK 917503:OK 983039:OK 1015807:OK 1032191:OK 1040383:OK 1044479:OK 1046527:OK 1047551:OK 1048063:OK 1048319:OK 1048447:OK 1048511:OK 1048543:OK 1048559:FAIL 1048546:FAIL 1048544:FAIL
max_column_name=64                      # column name length
   ###We are trying (example with N=5):
   ###create table crash_q (qaaaaa integer)
   ###insert into crash_q (qaaaaa) values(1)
   ###select qaaaaa from crash_q
   ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:OK 67:FAIL 64:FAIL
max_columns=2599                        # Columns in table
   ###We are trying (example with N=5):
   ###create table crash_q (a integer ,a0 integer,a1 integer,a2 integer,a3 integer,a4 integer)
   ### 4096:FAIL 819:OK 2457:OK 3276:FAIL 2621:FAIL 2490:OK 2555:OK 2588:OK 2604:FAIL 2591:OK 2597:OK 2600:FAIL 2598:OK 2599:FAIL
max_conditions=85660                    # OR and AND in WHERE
   ###We are trying (example with N=5):
   ###select a from crash_me where a=1 and b='a'  or a=0 and b='0' or a=1 and b='1' or a=2 and b='2' or a=3 and b='3' or a=4 and b='4'
   ### 27592:OK 41389:OK 48287:FAIL 42769:OK 45528:FAIL 43321:FAIL 42880:FAIL 42791:OK 42835:FAIL 42800:OK 42817:OK 42826:OK 42830:OK 42832:FAIL 42831:FAIL
max_expressions=836                     # simple expressions
   ###We are trying (example with N=5):
   ###select 1+1+1+1+1+1
   ### 5000:FAIL 1000:FAIL 200:OK 600:OK 800:OK 900:FAIL 820:OK 860:FAIL 828:OK 844:FAIL 831:OK 837:FAIL 832:OK 834:OK 835:OK 836:OK
max_index=32                            # max index
   ### max_unique_index=32 ,so max_index must be same
max_index_length=1000                   # index length
   ###We are trying (example with N=5):
   ###create table crash_q (q0 char(5) not null,unique (q0))
   ###insert into crash_q values('aaaaa')
   ### 4096:FAIL 819:OK 2457:FAIL 1147:FAIL 885:OK 1016:FAIL 911:OK 963:OK 989:OK 1002:FAIL 992:OK 997:OK 999:OK 1000:OK 1001:FAIL
max_index_name=64                       # index name length
   ###We are trying (example with N=5):
   ###create index crash_qaaaaa on crash_me (a)
   ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:FAIL 57:OK 60:FAIL 58:FAIL
max_index_part_length=255               # max index part length
   ###We are trying (example with N=5):
   ###create table crash_q (q char(5) not null,unique(q))
   ###insert into crash_q (q) values ('aaaaa')
   ###select q from crash_q
   ### 524271:FAIL 104854:FAIL 20971:FAIL 4194:FAIL 839:FAIL 168:OK 503:FAIL 235:OK 369:FAIL 262:FAIL 241:OK 251:OK 256:FAIL 252:OK 254:OK 255:OK
max_index_parts=16                      # index parts
   ###We are trying (example with N=5):
   ###create table crash_q (q0 integer not null,q1 integer not null,q2 integer not null,q3 integer not null,q4 integer not nul...(1263)
   ###insert into crash_q (q0,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22,q23,q24,q25,q26,q...(284)
   ###select q0 from crash_q
   ### 32:FAIL 7:OK 19:FAIL 10:OK 14:OK 16:FAIL 15:OK
max_index_varchar_part_length=255       # index varchar part length
   ###We are trying (example with N=5):
   ###create table crash_q (q varchar(5) not null,unique(q))
   ###insert into crash_q (q) values ('aaaaa')
   ###select q from crash_q
   ### 524271:FAIL 104854:FAIL 20971:FAIL 4194:FAIL 839:FAIL 168:OK 503:FAIL 235:OK 369:FAIL 262:FAIL 241:OK 251:OK 256:FAIL 252:OK 254:OK 255:OK
max_row_length=65534                    # max table row length (without blobs)
   ###We are trying (example with N=5):
   ###create table crash_q  (q0 char(5) not null)
   ###insert into crash_q  values ('aaaaa')
   ### 331372:FAIL 66275:FAIL 13255:OK 39765:OK 53020:OK 59647:OK 62961:OK 64618:OK 65446:OK 65860:FAIL 65529:OK 65694:FAIL 65562:FAIL 65536:FAIL 65531:OK 65533:OK 65534:OK 65535:FAIL
max_row_length_with_null=65502          # table row length with nulls (without blobs)
   ###We are trying (example with N=5):
   ###create table crash_q  (q0 char(5) )
   ###insert into crash_q  values ('aaaaa')
   ### 65534:FAIL 13107:OK 39320:OK 52427:OK 58980:OK 62257:OK 63895:OK 64714:OK 65124:OK 65329:OK 65431:OK 65482:OK 65508:FAIL 65487:OK 65497:OK 65502:OK 65505:FAIL 65503:FAIL
max_select_alias_name=+512              # select alias name length
   ###We are trying (example with N=5):
   ###select b as aaaaa from crash_me
max_stack_expression=836                # stacked expressions
   ###We are trying (example with N=5):
   ###select 1+(1+(1+(1+(1+(1)))))
   ### 1000:FAIL 200:OK 600:OK 800:OK 900:FAIL 820:OK 860:FAIL 828:OK 844:FAIL 831:OK 837:FAIL 832:OK 834:OK 835:OK 836:OK
max_table_alias_name=+512               # table alias name length
   ###We are trying (example with N=5):
   ###select aaaaa.b from crash_me aaaaa
max_table_name=64                       # table name length
   ###We are trying (example with N=5):
   ###create table crash_qaaaaa (q integer)
   ###insert into crash_qaaaaa values(1)
   ###select * from crash_qaaaaa
   ### 256:FAIL 51:OK 153:FAIL 72:FAIL 55:OK 63:FAIL 57:OK 60:FAIL 58:FAIL
max_text_size=1048543                   # max text or blob size
   ###We are trying (example with N=5):
   ###create table crash_q (q mediumtext)
   ###insert into crash_q values ('aaaaa')
   ###select * from crash_q
   ### 524272:OK 786408:OK 917476:OK 983010:OK 1015777:OK 1032161:OK 1040353:OK 1044449:OK 1046497:OK 1047521:OK 1048033:OK 1048289:OK 1048417:OK 1048481:OK 1048513:OK 1048529:OK 1048537:OK 1048541:OK 1048543:OK 1048544:FAIL
max_text_size=1048543                   # max text or blob size
   ###We are trying (example with N=5):
   ###create table crash_q (q mediumtext)
   ###insert into crash_q values ('aaaaa')
   ###select * from crash_q
   ### 524272:OK 786408:OK 917476:OK 983010:OK 1015777:OK 1032161:OK 1040353:OK 1044449:OK 1046497:OK 1047521:OK 1048033:OK 1048289:OK 1048417:OK 1048481:OK 1048513:OK 1048529:OK 1048537:OK 1048541:OK 1048543:OK 1048544:FAIL
max_unique_index=32                     # unique indexes
   ###We are trying (example with N=5):
   ###create table crash_q (q integer,q1 integer not null,unique (q1),q2 integer not null,unique (q2),q3 integer not null,uniq...(72)
   ###insert into crash_q (q,q1,q2,q3,q4,q5) values (1,1,1,1,1,1)
   ###select q from crash_q
   ### 32:OK 48:FAIL 35:FAIL 33:FAIL
max_varchar_size=1048543                # max varchar() size
   ###We are trying (example with N=5):
   ###create table crash_q (q varchar(5))
   ###insert into crash_q values ('aaaaa')
   ###select * from crash_q
   ### 524287:OK 786431:OK 917503:OK 983039:OK 1015807:OK 1032191:OK 1040383:OK 1044479:OK 1046527:OK 1047551:OK 1048063:OK 1048319:OK 1048447:OK 1048511:OK 1048543:OK 1048559:FAIL 1048546:FAIL 1048544:FAIL



--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Gold Dragon
Дата 23.7.2012, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Цитата(Бонифаций @  23.7.2012,  21:15 Найти цитируемый пост)
Кстати, а как такое может быть, что aaa='b1' и одновременно aaa='b2' и т.д. Может должен быть OR вместо AND? Если OR, тогда проще сделать  where aaa in ('b1','b2','b3',....'bn');
Я просто от балды привёл пример, но то что ты показал именно это и нужно smile

НУ на сколько я понял, пара сотен условий это нормально...



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Akina
Дата 23.7.2012, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Gold Dragon, гораздо разумнее использовать 
Код

WHERE aaa IN ('b1','b2','b3', ...... ,'bххх')





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gold Dragon
Дата 24.7.2012, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



это я уже понял.. совсем не подумал об этом..


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Zloxa
Дата 24.7.2012, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Gold Dragon @  23.7.2012,  21:24 Найти цитируемый пост)
пара сотен условий это нормально...

Врядли это нормально, это определенно экстраординарно.  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Bogomil
Дата 8.8.2012, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.4.2012

Репутация: нет
Всего: 0



экстраординарно - не то слово...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1352 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.