MySQL запрос на оптимизацию

У меня есть одна проблема MySQL. Я должен оптимизировать некоторые запросы на моем сайте. Один из них я уже сделал, но есть некоторые, которые я не могу решить без вашей помощи.

У меня есть таблица под названием "новости":

CREATE TABLE IF NOT EXISTS `news` (
  `id` int(10) NOT NULL auto_increment,
  `edited` smallint(1) NOT NULL default '0',
  `site` varchar(30) default NULL,
  `foreign_id` varchar(25) default NULL,
  `title` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `image` varchar(255) default NULL,
  `horizontal` smallint(1) NOT NULL,
  `image_author` varchar(255) default NULL,
  `text_author` varchar(255) default NULL,
  `lang` varchar(3) NOT NULL,
  `link` varchar(255) NOT NULL,
  `date` date NOT NULL,
  `redirect` smallint(1) NOT NULL,
  `parent` int(10) NOT NULL,
  `views` int(5) NOT NULL,
  `status` smallint(1) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `lang` (`lang`,`status`),
  KEY `date` (`date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=47122 ;

как вы можете видеть, у меня есть два индекса: "lang" и "date"

Я пробовал несколько комбинаций разных индексов, и этот дал мне лучшие результаты... к сожалению, только на моем локальном компьютере. На сервере у меня все еще плохие результаты. Я хочу сказать, что база данных одинакова.

запрос:

SELECT id FROM news WHERE lang =  'en' AND STATUS =1 ORDER BY DATE DESC LIMIT 0, 10

localhost объяснить:

+ ---- + ------------- + ------- + ------- + -------------- - + ------ + --------- + ------ + ------ + ------------- +
| id | select_type | стол | тип | возможные_ключи | ключ | key_len | ref  | строки |    Extra    |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
|  1 | ПРОСТО | новости | индекс | язык | дата |       3 | NULL |   23 | Используя где |
+ ---- + ------------- + ------- + ------- + -------------- - + ------ + --------- + ------ + ------ + ------------- +

Сервер объяснил:

+ ---- + ------------- + ------- + ------ + --------------- + -------- + --------- + ------------- + ------- + -------- --------------------- +
| id | select_type | стол | тип | возможные_ключи | ключ | key_len | ref  | строки |            Extra            |
+----+-------------+-------+------+---------------+--------+---------+-------------+-------+-----------------------------+
|  1 | ПРОСТО | новости | ref | статус | статус |      13 | const,const | 15840 | Используя где; Использование сортировки файлов |
+ ---- + ------------- + ------- + ------ + --------------- + -------- + --------- + ------------- + ------- + -------- --------------------- +

Я посмотрел много других подобных тем, но, к сожалению, я не могу найти решение для работы на моем сервере. Я буду очень рад получить от вас какое-то решение с некоторым объяснением этого, чтобы я мог оптимизировать другие мои запросы.

Спасибо!

1 ответ

Это ваш запрос:

SELECT id
FROM news
WHERE lang = 'en' AND STATUS =1
ORDER BY DATE DESC
LIMIT 0, 10

Лучший индекс - это тот, который содержит все поля, используемые в запросе (всего четыре поля). Порядок в индексе определяется условиями равенства в where пункт, сопровождаемый order by пункт, за которым следуют другие столбцы в select пункт.

Итак, попробуйте этот индекс: ndws(leng, status, date, id),

Другие вопросы по тегам