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

В MySQL поставянето на SELECT foo повишава ли производителността, ако foo е индексирано?

Първото нещо, което трябва да знаете е, че MySQL използва само един индекс на псевдо-SELECT (не оператор) - когато преглеждате изхода на SELECT с помощта на EXPLAIN, ще видите кой индекс е избран за. EXPLAIN може да се изпълнява само на SELECTS, така че трябва да приемем, че DELETE/UPDATE използва същия план, когато разменяте синтаксиса за SELECT...

Повечето бази данни (вградените могат да бъдат странни), доколкото знам, поддържат използването на индекси в следните клаузи:

  • ИЗБЕРЕТЕ
  • JOIN (синтаксис ANSI-92)
  • КЪДЕ (защото има и ANSI-89 и филтриране тук)
  • HAVING (WHERE еквивалент, но за разлика от WHERE - позволява обобщена употреба без нужда от подзаявка)
  • ПОРЪЧАЙТЕ ОТ

Не съм 100% за GROUP BY, така че за момента го пропускам.

В крайна сметка това е изборът на оптимизатора за това какво да се използва въз основа на неговия алгоритъм и статистиката, която има на разположение. Можете да използвате синтаксис ANALYZE TABLE за опресняване на статистиката (периодично, не постоянно, моля).

Допълнение

MySQL също така ограничава количеството пространство за разпределяне на индекси - 1000 байта за MyISAM таблици и 767 байта за InnoDB таблици . Тъй като MySQL използва само един индекс на psuedo-SELECT, покриващите индекси (индекси, които включват повече от една колона) са добра идея, но наистина става дума за тестване на най-често срещаната заявка и оптимизиране за нея възможно най-добре. Приоритетът на индексиране трябва да бъде:

  1. Първичен ключ (някъде във v5 създаването на индекс за pk стана автоматично)
  2. Външни ключове (следващият най-вероятен JOIN кандидат
  3. Критерии за филтриране (при положение, че имате място)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Когато се свързвам към множество бази данни, имам ли нужда от множество SQLAlchemy метаданни, база или сесия?

  2. MYSQL:Копиране на данни от таблици от 2 бази данни. И двете бази данни са в различни сървъри (хостинг компании)

  3. Грешка във външния ключ на MySQL 1005 errno 150 първичен ключ като външен ключ

  4. Разделяне на ограничена низова стойност на редове

  5. MySQL изтрива множество редове в една заявка, уникални за всеки ред