sql >> Database >  >> RDS >> Sqlserver

SQL Server:moet ik information_schema-tabellen gebruiken in plaats van sys-tabellen?

Tenzij u een toepassing schrijft waarvan u zeker weet dat deze draagbaar moet zijn of als u alleen vrij basale informatie wilt, zou ik om te beginnen standaard de propriëtaire SQL Server-systeemweergaven gebruiken.

Het Information_Schema views tonen alleen objecten die compatibel zijn met de SQL-92-standaard. Dit betekent dat er geen informatieschemaweergave is voor zelfs vrij basale constructies zoals indexen (deze zijn niet gedefinieerd in de standaard en worden overgelaten als implementatiedetails.) Laat staan ​​alle eigen kenmerken van SQL Server.

Bovendien is het niet helemaal het wondermiddel voor draagbaarheid dat men mag aannemen. Implementaties verschillen nog steeds tussen systemen. Oracle implementeert het helemaal niet "out of the box" en de MySql-documenten zeggen:

Gebruikers van SQL Server 2000 (die ook de standaard volgt) merken wellicht een sterke overeenkomst. MySQL heeft echter veel kolommen weggelaten die niet relevant zijn voor onze implementatie, en kolommen toegevoegd die MySQL-specifiek zijn. Een dergelijke kolom is de kolom ENGINE in de tabel INFORMATION_SCHEMA.TABLES.

Zelfs voor brood-en-boter-SQL-constructies, zoals beperkingen voor externe sleutels, is het Information_Schema weergaven kunnen aanzienlijk minder efficiënt zijn om mee te werken dan de sys. weergaven omdat ze geen object-ID's tonen die een efficiënte bevraging mogelijk maken.

bijv. Zie de vraag SQL-query vertragen van 1 seconde naar 11 minuten - waarom? en uitvoeringsplannen.

INFORMATION_SCHEMA

sys



  1. Afbeeldingen uploaden in CKEditor zonder een plug-in te gebruiken

  2. Inleiding tot OPENJSON met voorbeelden (SQL Server)

  3. Voorbeelden van het converteren van 'time' naar 'datetime' in SQL Server (T-SQL)

  4. Lopend totaal per groeps-SQL (Oracle)