[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как исключить запись одинаковых значений в базу, у
Страницы: 1, 2, 3, 4, 5, 6
Valick
twin, это не плохо, это очень плохо.
По крайней мере это говорит о незнании SQL , ну и при запросах в цикле появляется паразитная нагрузка на MySQL


_____________
Стимулятор ~yoomoney - 41001303250491
twin
Valick
Аргументируй

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sergeiss
Цитата (twin @ 22.12.2014 - 09:27)
Чем do... while хуже,....

Я в шоке.... От Николая не ожидал, что он начнет пропагандировать обращение к БД в цикле.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
twin
Вы сначала вникните чуток. Услышали звон и как мантру теперь поете - плохо, плохо. Я представил вариант. Объясниете, чем он плох.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sergeiss
Цитата (twin @ 22.12.2014 - 09:35)
Услышали звон и как мантру теперь поете - плохо, плохо.

Именно так smile.gif Как только появляется обращение к БД в цикле, там, где этого можно легко избежать - это ПЛОХО. Нет, не так. Это КАТЕГОРИЧЕСКИ ПЛОХО! Просто "по определению". Потому что создает много ненужной нагрузки. Запросы в цикле в сумме потребуют больше времени, чем один, правильно составленный сложный запрос.
Да, такой цикл будет работать и даже выдавать ожидаемый результат. Но он потребует много времени и ресурсов.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
andrey888
twin ясно что можно остановить цикл сразу после первого попадания + ясно что у тс скорее всего цикл никогда не будет долгим и тяжелым . НО на будущее для самого тс обращение к базе в цикле это ПЛОХО. как говорится бережёного бог бережёт, думаю осмотрительней писать код с учетом 99% возможных ситтуаций.

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
twin
Ну это ожидаемо. Объяснение у вас одно - плохо, потому что очень плохо. Особенно нелепо смотрится "забота" о ТС, мол он привыкнет и будет всегда так делать. Вы чего, серьёзно? У меня просто нет слов.

А я смею утверждать, что это самый оптимальный вариант. Могу объяснить почему, просто сначала очень хочется вашей настоящей аргументации, а не мантр плана
Цитата
это ПЛОХО. Нет, не так. Это КАТЕГОРИЧЕСКИ ПЛОХО! Просто "по определению".


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
andrey888
twin да пусть и забота smile.gif , если бы мне изначально говорили что обращение к БД в цикле это норма - то я бы кучу *овна наделал в своих проектах. Будет куда правильнее если тс скажет для чего он делает это.. Тогда, возможно, многие увидят намного более оптимальное решение.

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
twin
Это однобокая забота. Вот кто-то "озаботился" в свое время, теперь Valick и sergeiss боятся запроса в цикле как огня. И кидаются с огнетушителем на обычный кухоный примус.

Заботиться нужно не так. Нужно объяснять, что есть правила, но в правилах есть исключения. И иногда эти исключения гораздо эффективнее, чем правило. А не бить по рукам не разобравшись.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
volter9
twin
Жесть :)

А вообще, я предлогаю такой вариант:

1. Выбрать все существующие номера.
2. Сгруппировать их по 'id9'
3.
// $grouped = сгруппированные числа из п.2
$random = rand(1000000000, 9999999999);
while (in_array($random, $grouped)) {
$random = rand(1000000000, 9999999999);
}

4. ...
5. Profit! :)

_____________
Мой блог
Valick
Цитата (twin @ 22.12.2014 - 08:58)
просто сначала очень хочется вашей настоящей аргументации

Цитата (Valick @ 22.12.2014 - 08:29)
По крайней мере это говорит о незнании SQL

И пусть бросит в меня камень тот кто считает что не знание SQL это хорошо.
Сам по себе INSERT IGNORE - это тяжёлый запрос для БД.
было время когда я тоже не знал этого
http://softtime.ru/forum/read.php?id_forum=3&id_theme=57631

_____________
Стимулятор ~yoomoney - 41001303250491
twin
Valick
Принимается. У меня есть что ответить, но сначала хотелось бы услышать аргументацию sergeiss


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
GET
Согласен с большинством особенно если INNODB, но с другой стороны если это штучный запуск типа какого-то обслуживания...

rolleyes.gif
user posted image


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
twin
Я так понял, Сергея мы не дождемся. По крайней мере в ближайшее время. Отвечу Valick'у пока.

С каких это пор INSERT IGNORE стал тяжелее, чем INSERT с предварительным запросом SELECT? Ничего не стану говорить о знаниях SQL, предположу только, что этот ошибочный вывод был сделан из реплики Trianon
Цитата
Оператор INSERT "тяжел" хотя бы тем, что это оператор DML а не SQL - он вносит измеения в таблицу, а не читает её.
Тогда нужно было дочитать её до конца. А там четко и ясно:
Цитата
В ситуации, когда можно обойтись без записи - без нее стоит обойтись.
Задача, описываемая в том топике, предполагала, что запись не обязательна, если присутствует весь набор слов. Текущая же задача предполагает обязательную запись. И здесь IGNORE как нельзя кстати.

Сразу отвечу тем, кто думает, что try... catch предпочтительнее цикла. А что вы будете делать, если не прокатит второе число? А третье? GOTO юзать?

Ну и предположительно Сергею. Насчет
Цитата
Потому что создает много ненужной нагрузки.
Этот код не создает ненужной нагрузки вообще. В принципе не создает. Потому что если и сработает цикл (а do.. while предполагает выход из него сразу), то это оправдано. Значит попали не туда. В любом случае такая ситуация потребует дополнительных проверок, а значит и нагрузок. А теперь посчитай вероятность такого исхода событий. Исходных данных мало, но судя по диапазону, это миллиард возможных значений. Если предположить, что уже есть десяток тысяч готовых, то вероятность совпадений крайне мала. И если за день "провернется" пара лишних циклов, то это пыль. А сколько это позволит исключить действительно лишних запросов SELECT?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sergeiss
Цитата (twin @ 22.12.2014 - 10:24)
теперь Valick и sergeiss боятся запроса в цикле как огня

Да, я считаю его неправильным, цикл при запросе к БД. Если честно, то даже аргументировать не хочу. Потому что это просто троллинг со стороны Твина. То же самое, что аргументировать то, что почему не надо перед каждым запросом заново коннектиться к БД и после каждого запроса отключаться от БД.
Хорошо, Николай, учи так и дальше smile.gif Тебя же будут потом склонять нехорошими словами, а не меня smile.gif

Я сразу, в начале темы, предложил наиболее правильное решение - функцию внутри БД. На что мне возразили, что не в каждой БД это возможно. ОК, пусть так. Значит работаем с "кривой" БД. Далее, как вариант, я предложил оценить одним запросом сразу несколько значений. С высокой вероятностью этого запроса будет достаточно. И этот запрос будет заведомо быстрее, чем несколько в цикле.

А причина очень простая. На отправку запроса и возврат данных каждый раз тратится некоторое время. Тут немного, там немного... А в итоге может набежать уже немало.

И да - надо привыкать сразу программировать правильно. Это касается и стиля написания кода, и обращений к БД, и много чего другого. Лучше сразу научиться правильно, чем потом долго и нудно переучиваться. Исходя из этого правила, я буду учить людей сразу так, как ПРАВИЛЬНО. Накосячить они сами сумеют smile.gif

Цитата (twin @ 22.12.2014 - 10:24)
И иногда эти исключения гораздо эффективнее, чем правило.

Может быть и так - если запрос криво написан, то да, он может дольше выполняться, чем куча запросов в цикле. Но это не значит, что надо делать циклы, а не оптимизировать запрос.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.