За последние 24 часа нас посетили 16436 программистов и 1551 робот. Сейчас ищут 2023 программиста ...

оптимизация с помощью индексов

Тема в разделе "MySQL", создана пользователем AniMEshKa, 8 июл 2008.

  1. AniMEshKa

    AniMEshKa Активный пользователь

    С нами с:
    4 сен 2007
    Сообщения:
    151
    Симпатии:
    0
    Адрес:
    Минск
    хотелось бы оптимизировать запросы.. но что-то не могу разобраться как использовать индексы. вот к примеру создала так : [sql]CREATE INDEX i_num ON table (num)[/sql]
    к примеру надо выбрать первых 10 записей упорядоченных по полю num..
    как сформировать запрос?
    Спасибо[/sql]
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    База данных сама использует индексы, вам лишь остается в этом убедиться:
    [sql]EXPLAIN SELECT * FROM table ORDER BY num[/sql]
     
  3. AniMEshKa

    AniMEshKa Активный пользователь

    С нами с:
    4 сен 2007
    Сообщения:
    151
    Симпатии:
    0
    Адрес:
    Минск
    что-то не выходит.. везде пишет primary.. не хочет мои индексы использовать.. подскажите что непрпавлиьно делаю..
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Всю структуру таблицы покажи.
     
  5. AniMEshKa

    AniMEshKa Активный пользователь

    С нами с:
    4 сен 2007
    Сообщения:
    151
    Симпатии:
    0
    Адрес:
    Минск
    попробовала по-разному сформировать запросы.. в итоге получилось использование индексов при использовании where:
    [sql]EXPLAIN SELECT * FROM table1 where num>1 ORDER BY num[/sql]
    что-то так и получается что при использование where задействуются индексы.. ачто делать без where?
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Если на num есть индекс и сортировка идёт по этому полю, то MySQL будет использовать дерево индекса, хотя и не скажет об этом в EXPLAIN.
     
  7. AniMEshKa

    AniMEshKa Активный пользователь

    С нами с:
    4 сен 2007
    Сообщения:
    151
    Симпатии:
    0
    Адрес:
    Минск
    наверное что-то делаю неправильно.. так как по времени выбор данных что с индексом что без - одно и тоже.. :(
     
  8. AniMEshKa

    AniMEshKa Активный пользователь

    С нами с:
    4 сен 2007
    Сообщения:
    151
    Симпатии:
    0
    Адрес:
    Минск
    вот у меня что с индексом что без.. одно и тоже время :(
     
  9. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    AniMEshKa

    если таблица очень маленькая, то анализатор запросов может решить, что ему быстрее прочитать всю таблицу, чем юзать индекс - так тому и быть...

    а без where производится полное чтение таблицы. использование индекса, даже если он есть, просто бессмысленно, ибо в любом случае нужно отдавать ВСЕ данные
     
  10. AniMEshKa

    AniMEshKa Активный пользователь

    С нами с:
    4 сен 2007
    Сообщения:
    151
    Симпатии:
    0
    Адрес:
    Минск
    на самом деле таблица очень большая.. так что и время выборки - существенное значение.. просто я заметила что упорядочиваине идёт по тому полю которе упомянуто в where. а мне хотелось бы получить занчения ограниченные по одним полям а упорядоченные по полю не упомянутому.
     
  11. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    AniMEshKa

    видимо, explain показывает использование индексов только в объединениях.

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

    удали индекс из базы

    перейди в подпапку bin каталога апача и запусти
    ab -n 10000 -c 32 http://url_тестового_скрипта

    перезапусти апач и субд
    добавь индекс. повтори процедуру теста.

    если во втором случае число обработанных запросов в секунду заметно больше - субд использует индекс)
     
  12. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Для сортировки используется само дерево. Т.к. оно уже отсортированное. Просто EXPLAIN об этом не говорит. Легко проверить, если убрать с большой таблицы индекс на поле по которому сортируется.
     
  13. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Sergey89

    Сергей, а про сортировку я и не писал:)