Mysql Index не используется правильно - PullRequest
0 голосов
/ 20 декабря 2010

У меня странная проблема с простым индексом MySQL.

Я получил следующую таблицу:

CREATE TABLE `import` (
  `import_id` int(11) NOT NULL AUTO_INCREMENT,
  `import_title` text,
  `import_url` text,
  `import_description` text,
  `import_completed` enum('y','n') NOT NULL DEFAULT 'n',
  `import_user` int(11) DEFAULT NULL,
  `import_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`import_id`),
  KEY `import_added` (`import_added`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

В этой таблице несколько тысяч строк, и я хочу получить первые 100 со следующим предложением Select:

SELECT 
  import_id, 
  import_title, 
  import_url, 
  import_description, 
  import_user, 
  import_added 
FROM import 
WHERE import_completed = 'n' 
ORDER by import_added ASC 
LIMIT 0,100

Когда я использую DESCRIBE для более тщательного изучения запроса, мой локальный компьютер использует добавленный индекс и возвращает 100 строк в течение нескольких миллисекунд, как и ожидалось.

Когда я использую ту же базу данных с той же структурой и содержимым на своем «производственном» сервере и использую там DESCRIBE, это показывает, что индекс также используется, но он возвращает все строки в этой таблице и запросезанимает около 6 секунд.

Чего мне не хватает?Почему индекс не работает правильно?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

Неправильное использование индекса

...
KEY `import_added` (import_completed, import_added) ...

И составить план выполнения запроса

desc extended SELECT 
  import_id, 
  import_title, 
  import_url, 
  import_description, 
  import_user, 
  import_added 
FROM import 
WHERE import_completed = 'n' 
ORDER by import_added ASC 
LIMIT 0,100;
0 голосов
/ 20 декабря 2010

Попробуйте создать индекс для (import_completed, import_added) Часть where будет использовать import_completed, а для заказа будет использовать import_added. (Я надеюсь, что это работает на MyIsam - на Innodb это поведение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...