Так вот, когда размер базы данных становиться более 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.
denis920
Здравствуйте.
Есть самописный скрипт, он работает на php MySQL
Так вот, когда размер базы данных становиться более 20 мб, сайт начинает сильно подтормаживать.
По суди 20 мб это не так много для базы данных, есть сайта и с гигабайтными базами.
Вопрос, почему так происходит? Как можно оптимизировать работы базы данных?
По сути в базе большой размер имеет одна таблица, типа post в wordpress, может ее разбить на несколько таблиц. Но однако это не сильно изменит ситуацию ведь когда база будет скажем 40 мб, все вернется.
Подскажите в какую сторону смотреть?
LEOnidUKG
Проставка индексов.
Dram
Смотрите какие запросы выполняет скрипт — потом в phpMyadmin сами выполняете эти запросы добавив в начало EXPLAIN и анализируете.
Как правильно заметил Леня — скорее всего нужно добавить индекс на поля по которым идет выборка.
20 мб это вообще ни о чем, на таких объемах я видел тормоза только когда вообще не было индексов (включая первичного).
denis920
20 мб это вообще ни о чем, на таких объемах я видел тормоза только когда вообще не было индексов (включая первичного).
Насколько я понял, индексов нет вообще.
Подскажите, а простановка индексов отразиться на структуре базы? Я имею ввиду, придется наполнять сначала сайт?
Aisamiery
придется наполнять сначала сайт?
нет не придётся
onep
………………..
denis920
WP сам расставляет индексы в таблицах при установке. Ни чего там трогать не нужно.
Что такое WP ?
Dram
WP — Вордпрес
Создание индексов не затрагивает данные. (ничего не сотрется)
onep
Что такое WP ?
Извините, к топу отношение не имеет. Я невнимательно прочитал. Советовали правильно, расставьте индексы.
При большом количестве записей запрос типа «SELECT COUNT(`id`)» тормозит в таблицах InnoDB. Если нет другого способа, можно сменить тип таблицы на MyISAM.
estic
onep, это только в том случае, когда в запросе нет условия, т.е. когда определяется полное количество записей в таблице. В остальном «тормозит» точно так же. Кстати, полное количество записей можно кэшировать триггерами и использовать для выборки более «легкий» запрос, чем SELECT COUNT(*) 😉
danforth
можно сменить тип таблицы на MyISAM.
Не нужно вообще использовать в 2к20 MyISAM. А если тормозит SELECT COUNT(*), то надо подумать, нужно ли вообще вам точное количество строк, если да, то зачем? Для пагинации, или просто юзеру показать количество товаров в категории. Если для пагинации, то нужно юзать курсор и next-next пагинацию. Если для того, чтобы показать примерное количество строк в таблице, брать аппроксимизированные данные из таблицы information_schema.