Оптимизация базы данных MySQL


denis920
733

Здравствуйте.

Есть самописный скрипт, он работает на php MySQL

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

По суди 20 мб это не так много для базы данных, есть сайта и с гигабайтными базами.

Вопрос, почему так происходит? Как можно оптимизировать работы базы данных?

По сути в базе большой размер имеет одна таблица, типа post в wordpress, может ее разбить на несколько таблиц. Но однако это не сильно изменит ситуацию ведь когда база будет скажем 40 мб, все вернется.

Подскажите в какую сторону смотреть?


LEOnidUKG

Проставка индексов.


Dram

Смотрите какие запросы выполняет скрипт — потом в phpMyadmin сами выполняете эти запросы добавив в начало EXPLAIN и анализируете.

Как правильно заметил Леня — скорее всего нужно добавить индекс на поля по которым идет выборка.

20 мб это вообще ни о чем, на таких объемах я видел тормоза только когда вообще не было индексов (включая первичного).


denis920

Dram:
20 мб это вообще ни о чем, на таких объемах я видел тормоза только когда вообще не было индексов (включая первичного).

Насколько я понял, индексов нет вообще.

Подскажите, а простановка индексов отразиться на структуре базы? Я имею ввиду, придется наполнять сначала сайт?


Aisamiery

denis920:
придется наполнять сначала сайт?

нет не придётся


onep

………………..


denis920

onep:
WP сам расставляет индексы в таблицах при установке. Ни чего там трогать не нужно.

Что такое WP ?


Dram

WP — Вордпрес

Создание индексов не затрагивает данные. (ничего не сотрется)


onep

denis920:
Что такое WP ?

Извините, к топу отношение не имеет. Я невнимательно прочитал. Советовали правильно, расставьте индексы.

При большом количестве записей запрос типа «SELECT COUNT(`id`)» тормозит в таблицах InnoDB. Если нет другого способа, можно сменить тип таблицы на MyISAM.


estic

onep, это только в том случае, когда в запросе нет условия, т.е. когда определяется полное количество записей в таблице. В остальном «тормозит» точно так же. Кстати, полное количество записей можно кэшировать триггерами и использовать для выборки более «легкий» запрос, чем SELECT COUNT(*) 😉


danforth

onep:
можно сменить тип таблицы на MyISAM.

Не нужно вообще использовать в 2к20 MyISAM. А если тормозит SELECT COUNT(*), то надо подумать, нужно ли вообще вам точное количество строк, если да, то зачем? Для пагинации, или просто юзеру показать количество товаров в категории. Если для пагинации, то нужно юзать курсор и next-next пагинацию. Если для того, чтобы показать примерное количество строк в таблице, брать аппроксимизированные данные из таблицы information_schema.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *