Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Имеется таблица, в которой может быть от 0 до 10,000 записей, нужно оптимизировать её.
SHOW CREATE TABLE
Неактивен
Для начала нужно определить, что именно стоит оптимизировать. Посмотрите Поиск узких мест в производительности MySQL: ботанический определитель
По приведенному:
-) зачем вы числовым полям даете строковые значения
p.status = '1'
аналогично в определении таблицы
`status` tinyint(1) unsigned NOT NULL DEFAULT '0',
-) в текущем варианте нет никаких индексов
-) по первым двум запросам напрашивается (status, date_available)
-) ну и план показывайте
Но это всё пальцем в небо, сначала нужно определить, что затык в базе, потом собрать статистику и посмотреть какие запросы больше всего нагружают и уже их оптимизировать.
Неактивен
vasya написал:
Для начала нужно определить, что именно стоит оптимизировать. Посмотрите Поиск узких мест в производительности MySQL: ботанический определитель
По приведенному:
-) зачем вы числовым полям даете строковые значения
p.status = '1'
аналогично в определении таблицы
`status` tinyint(1) unsigned NOT NULL DEFAULT '0',
-) в текущем варианте нет никаких индексов
-) по первым двум запросам напрашивается (status, date_available)
-) ну и план показывайте
Но это всё пальцем в небо, сначала нужно определить, что затык в базе, потом собрать статистику и посмотреть какие запросы больше всего нагружают и уже их оптимизировать.
Спасибо, со "status" исправил.
Индексов нету, потому, что я не пойму, как их правильно составить для таких запросов.
А вот где взять план тоже не знаю.
И да, viewed это кол-во просмотров товара, но кэш запросов не используется. Буду пробовать его включить, если стоит.
Неактивен
Sn1k3rS.322 написал:
Индексов нету, потому, что я не пойму, как их правильно составить для таких запросов.
посмотрите FAQ №5
экспериментируйте, создавайте разные индексы, смотрите через план запроса, какие используются
для первых двух, как я уже говорил подойдет (status, date_available) или возможно просто на date_available
Sn1k3rS.322 написал:
А вот где взять план тоже не знаю.
добавьте explain перед запросом
explain select ...
на русском немного есть тут
Неактивен
Спасибо, с FAQ ознакомлюсь. Не знал, что EXPLAIN это план.
Неактивен
как вы измеряете время выполнения?
просто добавление индексов в таблицу увеличило вдвое выполнение select?
сделайте профилирование, чтобы определить на что тратится время
не понятно к каким запросам относятся указанные планы
показывайте в виде:
Неактивен