Už jste někdy narazili na dotaz, který SQL Server nelze spustit, protože odkazoval příliš mnoho tabulek?

hlasů
15

Už jsi někdy viděl některý z chybových zpráv tam?

- SQL Server 2000

Nemohl přidělit doplňkové tabulky pro rozlišení zobrazení nebo funkce.
Byl překročen maximální počet tabulek v dotazu (256).

- SQL Server 2005

Příliš mnoho názvů tabulek v dotazu. Maximální přípustná je 256.

Pokud ano, co jsi to udělal?

Vzdal se? Přesvědčil zákazníka zjednodušit jejich požadavky? Denormalized databázi?


@ (Všichni mi chce psát dotazu):

  1. Nejsem si jistý, jestli můžu vložit 70 kilobajtů kódu v editačním okně odpověď.
  2. I když to může to nepomůže, protože tento 70 kilobajtů kódu bude odkazovat na 20 až 30 stanoviska, že bych také muset psát, protože jinak kód bude bezvýznamný.

Nechci, aby to znělo, jako bych se pyšní zde ale problém není v dotazech. Tyto dotazy jsou optimální (nebo alespoň téměř optimální). Jsem strávil bezpočet hodin jim optimalizovat, hledáme pro každou jednotlivou sloupec a každý stůl, který může být odstraněn. Představte si sestavu, která má 200 nebo 300 sloupců, které musí být vyplněny s jedním SELECT (protože to je to, jak to bylo navrženo před několika lety, když byl ještě malý zpráva).

Položena 05/08/2008 v 15:54
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
8

Pro SQL Server 2005, doporučoval bych používat tabulky proměnných a částečně budování data as you go.

Chcete-li to provést, vytvořte tabulky proměnné, která představuje závěrečnou sadu výsledků, které chcete poslat uživateli.

Pak najít své primární tabulku (řekněme v tabulce objednávky v příkladu výše) a vytáhnout, že data, plus trochu doplňujících údajů, které je říci pouze jedno připojit pryč (jméno zákazníka, název výrobku). Můžete to udělat SELECT INTO, aby to rovnou do tabulky proměnné.

Odtamtud, iterovat tabulky a pro každý řádek, udělat spoustu malých výběrových dotazů, který načte všechny doplňující údaje, které potřebujete pro svůj sady výsledků. Vložte je do každého sloupce as you go.

Po dokončení pak můžete udělat jednoduchý SELECT * z tabulky proměnné a vrátit tento výsledek nastavit pro uživatele.

Nemám žádné pevné čísla pro to, ale tam byly tři různé případy, které jsem pracoval na datu, kdy dělá tyto menší dotazy skutečně pracoval rychleji, než dělat jeden masivní výběrový dotaz s partou připojí.

Odpovězeno 05/08/2008 v 16:19
zdroj uživatelem

hlasů
1

To by se stalo po celou dobu při psaní Reporting Services Reports pro Dynamics CRM zařízení běžících na serveru SQL Server 2000. CRM má pěkně normalizované datové schéma, což vede v mnoha připojí. Je tu vlastně hotfix kolem této vůle v rámci limitu od 256 do neuvěřitelných 260: http://support.microsoft.com/kb/818406 (vždy myslel, že tohle skvělý vtip ze strany týmu SQL Server).

Řešením, jak Dillie-O aludes aby je identifikovat vhodné „sub-připojí“ (s výhodou ty, které jsou používány několikrát) a faktor je do temp-tabulky proměnných, které pak použít ve svém hlavním připojí. Je to hlavní PIA a často zabije výkon. Omlouvám se za vás.

@Kevin, rád, že tee - říká, že to všechno :-).

Odpovězeno 02/11/2008 v 16:50
zdroj uživatelem

hlasů
1

@chopeen Dalo by se změnit způsob, jakým budete výpočtu těchto statistik, a místo toho zachovat samostatnou tabulku všech statistikách za vedlejší produkt .. při zadání objednávky, smyčku přes produktů a aktualizovat příslušné záznamy v tabulce statistik. To by posunulo hodně výpočtového zatížení na stránku pokladny, spíše než běží vše v jednom obrovském dotazu při spuštění sestavy. Samozřejmě tam jsou některé statistiky, které nebude fungovat tak dobře tímto způsobem, například sledování dalších nákupů zákazníků po zakoupení konkrétního výrobku.

Odpovězeno 05/08/2008 v 16:19
zdroj uživatelem

hlasů
1

Nikdy jsem narazit na tento druh situace, a abych byl upřímný, myšlenka na přihlášení> 256 tabulek mi dotaz fils se smrtelnou hrůzou.

Vaše první otázka by měla pravděpodobně „Proč tolik?“, Těsně následované „co bitů informací mohu NOT potřebujete?“ Byl bych strach, že množství dat, které se vracejí z takového dotazu začnou mít vliv na výkon aplikace zcela vážně, taky.

Odpovězeno 05/08/2008 v 15:57
zdroj uživatelem

hlasů
0

Měl stejný problém v SQL Server 2005 (pracoval v roce 2008), kdy jsem chtěl vytvořit pohled. Rozhodl jsem problém vytvořením uložené procedury namísto zobrazení.

Odpovězeno 07/03/2012 v 16:59
zdroj uživatelem

hlasů
0

Měl jsem stejný problém ... moje vývoj box běží SQL Server 2008 (pohled dobře fungoval), ale o výrobě (SQL Server 2005) názor, že ne. Skončil jsem vytváření pohledů se vyhnout toto omezení, s použitím nových pohledů v rámci dotazu v názoru, že hodil chybu.

Druh hloupé zvažuje logický výkon je stejný ...

Odpovězeno 19/08/2010 v 18:29
zdroj uživatelem

hlasů
0

Pro přidání dotazu: D

Také jsem pocit, že jednou z možných problémů by mohlo mít tunu (číst více než 200) tabulek název / hodnota, která by mohla kondenzované do jediné vyhledávací tabulky.

Odpovězeno 05/08/2008 v 16:26
zdroj uživatelem

hlasů
0

Já bych si přál, aby tento dotaz, ale jsem si představit, že je nějaký problém s nějakým druhem iterátoru, a když jsem si nemyslím, že situace, v nichž její možné, vsadím se, že je to ze špatné, zatímco / u / kurzorem nebo tunu špatně provedený názory.

Odpovězeno 05/08/2008 v 15:58
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more