|
|
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Добрый день уважаемые! У меня вопрос по реализации запроса. Есть две таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Соответственно во второй таблице содержатся ключи из первой таблицы, например те которые добавлены в корзину. Мне надо выбрать все элементы из первой таблице которых нет во второй: Код: sql 1. 2. 3. 4. 5. 6. Так вот вопрос в том, оптимален ли такой запрос с вложеным подзапросом или может есть более оптимальный вариант? Просто читал что вложенные запросы это в общем плохой вариант и если можно без них, то лучше без них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 07:05:28 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Опечатался немного: Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 07:11:12 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Гуляев Гоша, left join anti ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 14:48:09 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх , я погуглил left join anti mysql и если честно не нашёл ничего кроме описания самого left join. А anti выдаёт только для Oracle, PostgreSQL и майкрософтовые ссылки. Мне надо под MySQL решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 15:17:45 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
[quot Гуляев Гоша]Добрый день уважаемые! : Код: sql 1. 2. 3. 4. 5. 6. Так вот вопрос в том, оптимален ли такой запрос с вложеным подзапросом оптимально или может есть более оптимальный вариант? нет Просто читал что вложенные запросы это в общем плохой вариант и если можно без них, то лучше без них. не читай бред в интернете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 15:50:49 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Гуляев Гошая погуглил left join anti mysql и если честно не нашёл ничего кроме описания самого left join. Ну дык описание LEFT JOIN почитай, да... ну чтобы работа гугла зря не пропадала. Гуляев Гошавопрос в том, оптимален ли такой запрос с вложеным подзапросом или может есть более оптимальный вариант? Такой запрос на такой задаче и такой структуре - скорее свидетельство профнепригодности программиста, чем что-либо ещё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:22:14 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
AkinaГуляев Гошая погуглил left join anti mysql и если честно не нашёл ничего кроме описания самого left join. Ну дык описание LEFT JOIN почитай, да... ну чтобы работа гугла зря не пропадала. Гуляев Гошавопрос в том, оптимален ли такой запрос с вложеным подзапросом или может есть более оптимальный вариант? Такой запрос на такой задаче и такой структуре - скорее свидетельство профнепригодности программиста, чем что-либо ещё. и что ж тебе не нравится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 23:47:47 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
MasterZivи что ж тебе не нравится?Отсутствием гарантии, что подзапрос будет выполнен один раз. Невозможностью использования FK-индекса таблицы table2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 09:17:12 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Гуляев Гоша Добрый Э - Эх , я погуглил left join anti mysql и если честно не нашёл ничего кроме описания самого left join. А anti выдаёт только для Oracle, PostgreSQL и майкрософтовые ссылки. Мне надо под MySQL решение. Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 09:27:37 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
AkinaMasterZivи что ж тебе не нравится?Отсутствием гарантии, что подзапрос будет выполнен один раз. Невозможностью использования FK-индекса таблицы table2. И с чего ты пришёл к такому выводу ? Может у тебя есть какие-то логические доводы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 15:34:02 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Что тут может требовать логических доводов? Что именно не кажется очевидным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 15:38:14 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
AkinaЧто тут может требовать логических доводов? Что именно не кажется очевидным? Отсутствием гарантии, что подзапрос будет выполнен один раз. Невозможностью использования FK-индекса таблицы table2. Мне совсем неочевидны эти утверждения. К тому же, не совсем очевидно, что гарантия выполнения поздапроса один раз автоматом даст наилучшее время выполнения этого запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 15:41:47 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Пункт 1. Чтобы подзапрос выполнился один раз, сервер должен либо не разрешать коррелированных подзапросов вообще, либо уметь понять, что подзапрос не коррелированный. Без указания конкретной версии сервера убеждённости в том, что он поймёт правильно и выполнит подзапрос один раз - нет и быть не может. Пункт 2. После выполнения подзапроса мы получим тот дже набор записей, что и в таблице 2, но неиндексированный. Следовательно, индекса, который может использоваться, просто не существует. Странно, что надо разжёвывать такие элементарные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 18:29:39 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
AkinaПункт 1. Чтобы подзапрос выполнился один раз, сервер должен либо не разрешать коррелированных подзапросов вообще, либо уметь понять, что подзапрос не коррелированный. Без указания конкретной версии сервера убеждённости в том, что он поймёт правильно и выполнит подзапрос один раз - нет и быть не может. Пункт 2. После выполнения подзапроса мы получим тот дже набор записей, что и в таблице 2, но неиндексированный. Следовательно, индекса, который может использоваться, просто не существует. Странно, что надо разжёвывать такие элементарные вещи. сейчас некогда писать, но кратко - все домыслы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 12:23:57 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
MasterZivAkinaПункт 1. Чтобы подзапрос выполнился один раз, сервер должен либо не разрешать коррелированных подзапросов вообще, либо уметь понять, что подзапрос не коррелированный. Без указания конкретной версии сервера убеждённости в том, что он поймёт правильно и выполнит подзапрос один раз - нет и быть не может. Пункт 2. После выполнения подзапроса мы получим тот дже набор записей, что и в таблице 2, но неиндексированный. Следовательно, индекса, который может использоваться, просто не существует. Странно, что надо разжёвывать такие элементарные вещи. сейчас некогда писать, но кратко - все домыслы...ну пункт 1 точно не домысел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 13:02:28 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
MasterZivсейчас некогда писать, но кратко - все домыслы... Ох ты ж блин же ж... уж сразу написал бы "все знают, что это домыслы" - и спору конец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 13:12:20 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
AkinaMasterZivсейчас некогда писать, но кратко - все домыслы... Ох ты ж блин же ж... уж сразу написал бы "все знают, что это домыслы" - и спору конец. t4 = таблица с 999 интегерами т1 -- таблица с милионом записей (точнее 998001) Код: sql 1. 2. 3. т2 -- вторая таблица в изначальной задаче. по условию rand() > 0.х заполняется часть милиона. Код: sql 1. 2. 3. 4. два тестовых СКЛ-а, первый НОТ ИН, второй ЛЕФТ АНТИ ЖОИНТ. Ниже везде порядок сохраняется: Код: sql 1. 2. 3. 4. 5. 6. Код: sql 1. 2. 3. 4. 5. t2 = 8168 rows r1 = 0.469, 0.453, 1 PRIMARY t1 index PRIMARY 4 994548 100.00 Using where; Using index3 SUBQUERY t2 index PRIMARY PRIMARY 4 10424 100.00 Using index r2 = 1.343, 1.328 1 SIMPLE t1 index PRIMARY 4 994548 100.00 Using index1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.id 1 100.00 Using where; Not exists; Using index t2 = 96843 r1 = 0.547, 0.547 1 PRIMARY t1 index PRIMARY 4 994548 100.00 Using where; Using index3 SUBQUERY t2 index PRIMARY PRIMARY 4 91839 100.00 Using index r2 = 1.375. 1.391 1 SIMPLE t1 index PRIMARY 4 994548 100.00 Using index1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.id 1 100.00 Using where; Not exists; Using index t2 = 245979, r1 = 0.687, 0.688 1 PRIMARY t1 index PRIMARY 4 994548 100.00 Using where; Using index3 SUBQUERY t2 index PRIMARY PRIMARY 4 245002 100.00 Using index r2 = 1.422, 1.438 1 SIMPLE t1 index PRIMARY 4 994548 100.00 Using index1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.id 1 100.00 Using where; Not exists; Using index t2 = 482868 r1 = 2.125, 1.937 1 PRIMARY t1 index PRIMARY 4 994548 100.00 Using where; Using index3 SUBQUERY t2 index PRIMARY PRIMARY 4 486675 100.00 Using index r2 = 1.484, 1.485, 1 SIMPLE t1 index PRIMARY 4 994548 100.00 Using index1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.id 1 100.00 Using where; Not exists; Using index t2 = 806773 run1 = 2.375, 2.390 1 PRIMARY t1 index PRIMARY 4 994548 100.00 Using where; Using index3 SUBQUERY t2 index PRIMARY PRIMARY 4 805950 100.00 Using index run2 = 1.516, 1.516 1 SIMPLE t1 index PRIMARY 4 994548 100.00 Using index1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.id 1 100.00 Using where; Not exists; Using index ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 07:23:28 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
...сводную таблицу лень составлять. Короче лефт антижоинт постояно 1.3-1.5 сек. НОТ ИН показывает 0.4-0.6 сек в 2-3 раза быстрее когда вторая таблица ниже 25% от первой. При заполнении больше 50% НОТ ИН показывает 2.1-2.3 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 07:30:47 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
немного смешно, что експлаин показывает "Not exists" для левого антижоинта и НЕ показывает это для NOT IN. (mysql 5.7, windows 10 , i7-4970, 16G, EVO 850 pro SSD) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 07:34:07 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
ну типа, что б закруглить доклад: Код: sql 1. 2. 3. 4. 5. Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 07:38:35 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
javajdbc, mysql 5.7 зло ) Windows 10 еще из космоса )) (и кстати как она? для разработчика гладкий переход?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 08:31:22 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovjavajdbc, mysql 5.7 зло ) Раскрой, пожалуйста, тему. Можно в отдельном топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 13:31:13 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov >> mysql 5.7 зло ) ...не в курсе, какой последний дают скачать, такой и установил вчера.. >> Windows 10 еще из космоса )) (и кстати как она? для разработчика гладкий переход?) самам по себе 10-ка -- в полне стабильная, пользую по дому на нескольких компах уже больше года -- ни одного разрыва. Встает легко на железо до 7-10 лет. Насчет разработки -- все что работало в весьмерке -- вполне фурычит на десятке... всякие висуал студии, еклипсы, ораклы, мыскл, скл серверы... Это дома, а на работе допотопные вин7/сервер2012 и Федора 19 :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 16:33:12 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
MasterZiv, первое столкновение оказалось неудачным... при создании индекса по полю varchar(50) в совершенно голой базе он оказался бракованным, причем в MariaDB10.1(сто`ит на 5.7) тоже самое. ХДД-Диски новые. Потерял кучу времени. Вот теперь мое такое мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 18:25:37 |
|
||
|
Можно ли сделать запрос без подзапроса
|
|||
|---|---|---|---|
|
#18+
javajdbc, спасибо, я тяжело переходил на Win7, на Вин8 не пошел из-за Метро, хотя есть КлассикШелл и прочее, не увидел смысла, а теперь выскакивает назойливо переход на Win10, а что так назойливо - вызывает дикое отвращение... как стадо перегоняют... на работе есть еще экземпляры и с ХР, с древним софтом...а дома Бубунту+Вин7... а если я на работе поставлю Вин10 - все отделы встанут ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 18:37:34 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39116016&tid=1832416]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 299ms |

| 0 / 0 |
