SQL
MySQL Truncate/Delete - как это работает?
Всю жизнь работал с Оракл, тут жизнь заставила взяться за MySQL... Сделал табличку, написал скрипт на PHP для загрузки, загрузилось 15000 записей и скрипт сломался. Поправил скрипт и перед его перезапуском сделал truncate table. Смотрю select count(*) from table, говорит 130 записей извлечено... Чешу репу... пробую delete from table, и опять select count(*) from table - опять находит записи... опять делаю delete from table и select count(*) from table - опять находит записи но уже другое количество ...и так без конца. Вооообще не понимаю что происходит. Может кто подскажет где тут собака порылась? (mysql 8)
Интерпретация визуализированной регламентации квадрообразной дисфузии способствует таргетированной кристаллизации утраченной парадигмы элластуза, непременимой для межфазной паралаксии проходящей чрезмерную подготовку тонизирующего спектра
а "опять находит" сколько? тоже 130?
Саргис Галстян
порядок тот же, то значения всё время разные
Денис Щурёнков
там может таблица постоянно "кем-то" заново заполняется?
Если работаешь с базой mysql не локально, а по сети, то самая главная проблема - это величина таймаута. Таймаут - это самое узкое место в работе. А ты там count(*) используешь, который работает медленно, перебирая все записи в таблице до конца. Чем больше записей, тем медленней перебор count(*). Вместо count(*) нужно писать в конце запроса limit кол-во_строк. А лучше такие запросы писать как сохраненные процедуры в базе и дергать оттуда, передавая в них параметры. Я проверял mysql локально на таблицах весом несколько гигабайт. Полный отстой, работа медленная. Иногда пробуешь клиентскую программу типа Heidi sql, так она при просмотре таблиц пишет типа в данной таблице количество строк примерно столько-то:) Так что таймаут веб-сервера, если база на хосте, нужно выставить хотя-бы 120 сек. На счет выборки в mysql - она в каждом запросе оптимизируется по-новому. Порядок выборки записей может быть разным. Нужно их хотя-бы группировать как order by.
И нигде не используй звёздочку (*), а выбирай только по нужным именам полей и по условию. Ресурсы для баз всегда ограничены, на обычном ПК это ОЗУ, а по сети - таймаут и скорость трафика.
И нигде не используй звёздочку (*), а выбирай только по нужным именам полей и по условию. Ресурсы для баз всегда ограничены, на обычном ПК это ОЗУ, а по сети - таймаут и скорость трафика.
Саргис Галстян
локально
Похожие вопросы
- MySQL-запрос на обновление строки работает некорректно.
- Под каким пользователем нужно работать в MySQL?
- Друзья пожалуйста скажите любой бесплатный хостинг чтобы работал и поддерживал PHP + MySQL.
- Почему так нужен mysql?
- Не отрабатывает вложенный MySQL запрос
- Как в Mysql поставить, что бы при регистрации пароль содержал не меньше 8 символов?
- Обязательно ли делать первичный ключ (id колонку) в таблице mysql, если каждое значение и так будет уникальным?
- Форма ввода в базу данных MySQL через Php
- MySQL.Задания по запросам.
- Помогите решить 2 проблемы с Mysql