MySQL Query оптимизатор с индексом - PullRequest
1 голос
/ 29 февраля 2012

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

вот запрос для моего сайта

$sql = "SELECT * 
        FROM `adstable` 
        WHERE `keytype` = '".$cate."' 
        ORDER BY `adstable`.`id` DESC 
        LIMIT 2000";

, $ cate будет меняться в зависимости отВыбор категории посетителя.Я использую phpmyadmin, и я хочу знать, как индекс будет работать с запросом выше.Я создал индекс для столбца cate, но не знаю, как оптимизировать запрос с помощью созданного мной индекса.

Вот как я могу добавить индекс

ALTER TABLE  `adstable` ADD INDEX (  `keytype` )

, используя

EXPLAIN 
SELECT * 
FROM `adstable`
WHERE `keytype` = '".$cate."'
ORDER BY `adstable`.`id` DESC
LIMIT 2000

Я получил что-то вроде этого:

id | select_type | table  | type | possible_keys | key     | key_len | ref | rows | Extra
1  | SIMPLE  |adstable| ref  | keytype       | keytype |   38    |const|49392 | Using where; Using filesort

спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Если под cate column вы подразумевали keytype column, то ваш индекс уже используется.Вы заметили какое-либо улучшение в запросе?Чтобы проверить, действительно ли индекс используется в этом запросе, вы можете запустить следующий запрос:

EXPLAIN SELECT * FROM `adstable`
WHERE `keytype` = '".$cate."'
ORDER BY `adstable`.`id` DESC
LIMIT 2000

Вы можете опубликовать, как вы создали индекс и результат этого запроса, чтобы предоставить дополнительную информацию.

1 голос
/ 29 февраля 2012
  1. Это таблица MyISAM? Если да, добавьте индекс (keytype, id).

  2. Если вы можете снизить предел 2000 до чего-то более разумного, например, если вам действительно не нужно 2000 строк, уменьшите это значение.

  3. Вам действительно нужны все эти столбцы в списке SELECT? Если нет, удалите * и запишите только те столбцы, которые вам нужны.

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