Юлия
Юлия

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 😎

Дмитрий
Дмитрий

Интерпретация визуализированной регламентации квадрообразной дисфузии способствует таргетированной кристаллизации утраченной парадигмы элластуза, непременимой для межфазной паралаксии проходящей чрезмерную подготовку тонизирующего спектра

Юл
Юлия

Если работаешь с базой mysql не локально, а по сети, то самая главная проблема - это величина таймаута. Таймаут - это самое узкое место в работе. А ты там count(*) используешь, который работает медленно, перебирая все записи в таблице до конца. Чем больше записей, тем медленней перебор count(*). Вместо count(*) нужно писать в конце запроса limit кол-во_строк. А лучше такие запросы писать как сохраненные процедуры в базе и дергать оттуда, передавая в них параметры. Я проверял mysql локально на таблицах весом несколько гигабайт. Полный отстой, работа медленная. Иногда пробуешь клиентскую программу типа Heidi sql, так она при просмотре таблиц пишет типа в данной таблице количество строк примерно столько-то:) Так что таймаут веб-сервера, если база на хосте, нужно выставить хотя-бы 120 сек. На счет выборки в mysql - она в каждом запросе оптимизируется по-новому. Порядок выборки записей может быть разным. Нужно их хотя-бы группировать как order by.
И нигде не используй звёздочку (*), а выбирай только по нужным именам полей и по условию. Ресурсы для баз всегда ограничены, на обычном ПК это ОЗУ, а по сети - таймаут и скорость трафика.

N*
Natali **

а "опять находит" сколько? тоже 130?

Похожие вопросы
Я могу посмотреть содержимое таблицы в MySql?
Как обновить столбец в MySQL
Отличается ли синтаксис MySQL от MS SQL?
Как получить многомерный массив одним запросом mysql, wordpress...
Помогите найти современные учебники с примерами Php +mysql Web
Мне нужно научиться работать с SQLite. Нужно ли мне перед этим учить MySQL / SQL?
Помогите составить запрос MySQL!
Что такое MUL key в таблице employees в MySQL?
Mysql упорядочить колонки в нужном порядке и сохранить
ERD (mySQL диаграммы) через WorkBench - для чего они?