В чём отличие разных индексов?

Тема в разделе "Базы данных", создана пользователем Tima111, 5 авг 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Tima111

    Tima111 Читатель

    Заблокирован
    Регистр.:
    5 июл 2007
    Сообщения:
    218
    Симпатии:
    486
    Подскажите чем отличается индекс по одному полю, например "pole1"
    от индексов сразу по 2 полям "pole1", "pole2"?
    Т.е. если есть двойной индекс "pole1", "pole2", то индекс по "pole1" можно удалить?
    Или это совершенно разные индексы?
    Т.е. мне нужно искать по "pole1", а через SELECT выводить оба поля, как лучше сделать?
    Читал и в интернете и в книге, но так и не понял :(
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    запросы выполняются быстрее если указать значение первого поля или первого и второго поля из одного индекса полей, а если только для второго поля то индекс уже не используется

    Перейти по ссылке
     
    Tima111 нравится это.
  3. Tima111

    Tima111 Читатель

    Заблокирован
    Регистр.:
    5 июл 2007
    Сообщения:
    218
    Симпатии:
    486
    Вообщем задача такая:
    Нужно из таблицы искать по первому полю но чтобы выводились оба поля... Значит нужен индекс только для "pole1"
    НО если сделать по первому полю индекс "pole1", тогда запрос "SELECT pole1, pole2 ...;" очень долго исполняется.
    А запрос "SELECT pole1 ...;" быстро исполняется, но нужен доступ и ко второму полю.
    Как сделать чтобы запрос "SELECT pole1, pole2 ...;" быстро исполнялся?
     
  4. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    что после SELECT не важно, главное что после WHERE. Если WHERE pole1...
    или
    WHERE pole1... AND pole2...
    или
    WHERE pole1... OR pole2...
    тогда будет использоватся индекс двух полей (pole1 и pole2)

    А если только WHERE pole2... тогда может создать индекс для pole2

    А такой запрос показывает какие индексы будут использованы
    EXPLAIN EXTENDED SELECT * FROM test WHERE pole1=1 AND pole2=1;

    ещё можно явно указать какие индексы использовать
    EXPLAIN EXTENDED SELECT * FROM test USE INDEX (pole1) WHERE pole1=1;

    Перейти по ссылке
    Перейти по ссылке
     
    latteo нравится это.
Статус темы:
Закрыта.