Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли смисъл да се използва индекс, който ще има ниска мощност?

Индексът може да помогне дори при полета с ниска мощност, ако:

  1. Когато една от възможните стойности е много рядка в сравнение с другите стойности и я търсите.

    Например, има много малко далтонисти, така че тази заявка:

    SELECT  *
    FROM    color_blind_people
    WHERE   gender = 'F'
    

    най-вероятно ще се възползва от индекс на gender .

  2. Когато стойностите са склонни да бъдат групирани в реда на таблицата:

    SELECT  *
    FROM    records_from_2008
    WHERE   year = 2010
    LIMIT 1
    

    Въпреки че има само 3 отделни години тук най-вероятно първо се добавят записи с по-ранни години, така че много записи ще трябва да бъдат сканирани, преди да се върне първата 2010 запис, ако не за индекса.

  3. Когато имате нужда от ORDER BY / LIMIT :

    SELECT  *
    FROM    people
    ORDER BY
            gender, id
    LIMIT 1
    

    Без индекса, filesort би се изисквало. Въпреки че е донякъде оптимизиран, направете за LIMIT , пак ще се нуждае от пълно сканиране на таблицата.

  4. Когато индексът покрива всички полета, използвани в заявката:

    CREATE INDEX (low_cardinality_record, value)
    
    SELECT  SUM(value)
    FROM    mytable
    WHERE   low_cardinality_record = 3
    
  5. Когато имате нужда от DISTINCT :

    SELECT  DISTINCT color
    FROM    tshirts
    

    MySQL ще използва INDEX FOR GROUP-BY , и ако имате малко цветове, тази заявка ще бъде незабавна дори с милиони записи.

    Това е пример за сценарий, когато индексът на поле с ниска мощност е повече по-ефективно от това в поле с висока мощност.

Имайте предвид, че ако DML производителността не е особено важна, тогава е безопасно да създадете индекса.

Ако оптимизаторът смята, че индексът е неефективен, той просто няма да се използва.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL записи, които изтичат след 24 часа

  2. MySQL:Подреждане по поле, поставяне на празни клетки в края

  3. MySQL прокси алтернативи за разделяне на база данни

  4. Как да получите стойността от Javascript Prompt Box и да я предадете в PHP променлива, за да можете да запишете в SQL?

  5. Връщане на стойност, когато няма редове в PDO