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

Mysql е твърде бавен при проста заявка между две таблици

В InnoDB всеки индекс съдържа неявно първичния ключ.

Планът за обяснение показва, че индексът IDX_NOME се използва в таблица Paziente . СУБД търси името в индекса и намира ID_PAZIENTE там, което е ключът, от който се нуждаем за достъп до другата таблица. Така че няма какво да добавя. (В друга СУБД бихме добавили съставен индекс към (NOME, ID_PAZIENTE) за да се случи това.)

След това има таблица Analisi да обмисли. Намираме запис чрез FK_ANALISI_PAZIENTE който съдържа ID_PAZIENTE който се използва за намиране на съвпадението и имплицитно първичния ключ ID_ANALISI който може да се използва за достъп до таблицата, но това дори не е необходимо, тъй като имаме цялата необходима информация от индекса. Не остана нищо, което трябва да намерим в таблицата. (Отново в друга СУБД бихме добавили съставен индекс към (ID_PAZIENTE, ID_ANALISI) да има покриващ индекс.)

Така че това, което се случва, е просто:прочетете един индекс, за да прочетете другия индекс, за да преброите. Перфектно. Няма какво да добавя.

Ние можем замени COUNT(analisi0_.ID_ANALISI) с COUNT(*) тъй като първият казва само "брой записи, където ID_ANALISI не е нула", което винаги е така като ID_ANALISI е първичният ключ на таблицата. Така че е по-лесно да използвате последното и да кажете „брой записи“. Въпреки това не очаквам това да ускори значително заявката, ако изобщо.

Така че от гледна точка на заявката няма какво да ускори това. Ето още неща, които идват на ум:

  • Разделени таблици? Не, не бих видял полза от това. Тогава можеше да е по-бързо, ако заявката се изпълняваше в паралелни нишки, но доколкото знам, няма паралелно изпълнение на множество дялове в MySQL. (може и да греша.)
  • Дефрагментиране на таблиците? Не, самите таблици дори не са достъпни в заявката.
  • Това ни оставя с:Купете по-добър хардуер. (Съжалявам, че нямам по-добър съвет за вас.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Utilities - файл с опции ~/.my.cnf

  2. Как да предам таблица като параметър на MySqlCommand?

  3. Как да направя това в Laravel, подзаявка къде в

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

  5. Изберете произволни редове в mysql и ограничете във всяка група