sql >> Databáze >  >> RDS >> Sqlserver

Spuštění stejného SQL dotazu v jedné DB trvá déle než jiné DB na stejném serveru

Skutečnost, že máte dvě databáze na stejném serveru a se stejnou sadou dat (jak jste řekl), nezaručuje stejný plán provádění.

Zde jsou některé z důvodů, proč se plán dotazů může lišit:

  • Soubory mdf a ldf (pro každou databázi) jsou na různých discích. Pokud je onedrives rychlejší, bude tato databáze také spouštět dotaz rychleji.
  • zastavení statistik. Pokud máte jednu databázi s novějšími statistikami než ta druhá, SQL má větší šanci vybrat správný (a
    rychlejší) plán provádění.
  • Indexy:Vím, že jste řekli, že jsou oba identické, ale zkontroloval bych, zda na obou máte stejný typ indexů.

Místo porovnávání se zaměřte na to, proč dotaz běží pomalu, nebo na skutečný plán provádění. Kontrola skutečného plánu provádění pomalého dotazu vám dá nápovědu, proč běží pomaleji.

Také bych nepřidal příkaz NO LOCK k vyřešení problému. Podle mých zkušeností lze většinu pomalých dotazů vyladit pomocí kódu nebo indexu, namísto přidání nápovědy NO LOCK, která vám může přinést upravené nebo staré sady výsledků v závislosti na vašich transakcích.



  1. získání chybového argumentu '0' je mimo rozsah

  2. MySQL 8 vnořený výběr s počtem

  3. Jak převést výsledkovou tabulku na pole JSON v MySQL

  4. CHYBA PostgreSQL:poddotaz ve FROM nemůže odkazovat na jiné vztahy stejné úrovně dotazu