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

Кои колони обикновено правят добри индекси?

Индексите могат да играят важна роля в оптимизирането на заявките и бързото търсене на резултатите от таблици. Така че най-важната стъпка е да изберете кои колони да бъдат индексирани. Има две основни места, където можем да разгледаме индексирането:колони, посочени в клаузата WHERE и колони, използвани в клаузите JOIN. Накратко, такива колони трябва да бъдат индексирани, спрямо които трябва да търсите конкретни записи. Да предположим, че имаме таблица с име купувачи, където заявката SELECT използва индекси като по-долу:

SELECT
 buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal'   /* consider to use index */

Тъй като "buyer_id" се посочва в частта SELECT, MySQL няма да го използва за ограничаване на избраните редове. Следователно няма голяма нужда да го индексирате. По-долу е друг пример, малко по-различен от горния:

SELECT
 buyers.buyer_id, /* no need to index */
 country.name    /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
 first_name='Tariq' /* consider to use index */
AND
 last_name='Iqbal' /* consider to use index */

Съгласно горните заявки first_name колоните last_name могат да бъдат индексирани, тъй като се намират в клаузата WHERE. Също така допълнително поле, country_id от таблицата за държави, може да се разглежда за индексиране, тъй като е в клауза JOIN. Така че индексирането може да се разглежда за всяко поле в клаузата WHERE или клауза JOIN.

Следният списък също предлага няколко съвета, които винаги трябва да имате предвид, когато възнамерявате да създадете индекси във вашите таблици:

  • Индексирайте само онези колони, които се изискват в клаузите WHERE и ORDER BY. Индексирането на колони в изобилие ще доведе до някои недостатъци.
  • Опитайте се да се възползвате от функцията „индексен префикс“ или „индекс на няколко колони“ на MySQL. Ако създадете индекс като INDEX(first_name, last_name), не създавайте INDEX(first_name). Въпреки това, "индекс префикс" или "индекс с няколко колони" не се препоръчва във всички случаи на търсене.
  • Използвайте атрибута NOT NULL за тези колони, в които смятате за индексиране, така че стойностите NULL никога да не се съхраняват.
  • Използвайте опцията --log-long-format, за да регистрирате заявки, които не използват индекси. По този начин можете да прегледате този регистрационен файл и съответно да коригирате заявките си.
  • Изразът EXPLAIN ви помага да разкриете как MySQL ще изпълни заявка. Показва как и в какъв ред се съединяват таблиците. Това може да бъде много полезно за определяне как да се пишат оптимизирани заявки и дали е необходимо колоните да бъдат индексирани.

Актуализация (23 февруари'15):

Всеки индекс (добър/лош) увеличава времето за вмъкване и актуализиране.

В зависимост от вашите индекси (брой индекси и тип), се търси резултат. Ако времето ви за търсене ще се увеличи поради индекс, това е лош индекс.

Вероятно във всяка книга "Страница с индекс" може да има начална страница на глава, започване на номера на страницата на темата, също така започване на подтема. Някои разяснения в индексната страница помагат, но по-подробният индекс може да ви обърка или изплаши. Индексите също имат памет.

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



  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 Server с проект на Visual Studio 2017 Installer

  2. Системни бази данни на SQL Server – Поддръжка на MSDB

  3. SQL замества всички NULL

  4. Обединяване на стойности на колони в списък, разделен със запетая

  5. Как да картографирате поле на обект, чието име е запазена дума в JPA