- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Как говорится век учись - открыл для себя REPLACE INTO, раньше всегда когда нужно было что-то записать в базу использовал INSERT INTO.
Я правильно понимаю, если я в базу пишу новые значения и у меня первичный ключ ID, то можно смело использовать REPLACE вместо INSERT и это будет даже быстрее?
пруф https://cloud.yandex.ru/docs/ydb/yql/reference/syntax/replace_into
пруф https://cloud.yandex.ru/docs/ydb/yql/reference/syntax/replace_into
Ну это может быть у Яндекса такие заморочки. Я работаю с MySQL, и руководствуюсь доками для MySQL. А там так написано:
Сам производительность не проверял, ни к чему было. Но что-то мне подсказывает, что причин для лучшей производительности при замене не должно быть. И там, и там сервер должен определить, какой текущий номер автоинкремента и существует ли уникальный ключ с требуемым идентификатором. Только в случае INSERT выдаётся ошибка, а в случае REPLACE делается удаление и вставка.
MySQL uses the following algorithm for REPLACE (and LOAD DATA ... REPLACE ):
Try to insert the new row into the table
While the insertion fails because a duplicate-key error occurs for a primary key or unique index:
Delete from the table the conflicting row that has the duplicate key value
Try again to insert the new row into the table
То есть первым делом сервер пытается тупо вставить строку в таблицу. И в случае неудачи уже удаляет и снова вставляет. А если удачно прошёл первый этап - то всё, закончили. Одним словом, полный эквивалент INSERT.
Лично я предпочитаю использовать INSERT и REPLACE соответственно их назначению, то есть там, где дубли не предполагаются, использовать INSERT - исключительно по той причине, что не нужно морочить голову последующим читателям кода вопросом: "А что там может быть такого, что может понадобиться замена?". То есть в целях прозрачности кодирования.
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
Всё нужно использовать по назначению.
Для обычной вставки нужен INTO. ВСЕГДА!!!
REPLACE используется в основном там где идёт многопоточная вставка, например, парсеры собирают данные в одну кучу и потом идёт разбор всего этого и чтобы не делать дополнительных проверок в алгоритме всё сбрасывается на плечи MySQL и он там уже сама решает или заменить данные или вставить новые.
Также это подходит при импорте товаров, когда есть дублирующие товары то просто обновляется информация, а если новый то добавляется.
Все инструменты созданы под свои нужды.
ой, еще можно открыть для себя
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
А есть ещё: INSERT IGNORE
Много чего есть.
REPLACE вместо INSERT и это будет даже быстрее?
АГа... МАГИЯЯЯЯЯЯЯ
пруф https://cloud.yandex.ru/docs/ydb/yql/reference/syntax/replace_into
Ты определись ты с Mysql работаешь или с YDB?