Avatar billede netro Nybegynder
20. juli 2005 - 06:10 Der er 22 kommentarer og
2 løsninger

Bedste performance ved joins

Jeg skal have lavet et udtræk, hvor 10 tabeller skal joines. Hvad vil I foreslå for at opnå den bedste performance? At splitte forespørgslen op i flere views, der bruger hinanden? Eller at lave en stored procedure med join af alle tabeller samtidig? Eller..? Hvad har I bedst erfaring med?

Der er tale om små tabeller med nogle få tusinde poster i hver pt. Databasen er SQL Server 2000.
Avatar billede virus Nybegynder
20. juli 2005 - 07:02 #1
Jeg har blot min personlige mening, men jeg tror i en så lille applikation at du lige så godt kan bruge views, bare for at kunne beholde den store fleksibilitet.

SQL server laver jo lige som med sprocs også en execution plan til views, der kan genbruges af din applikation.
Avatar billede netro Nybegynder
20. juli 2005 - 07:11 #2
Ja, naturligvis vil tabellerne vokse, men vi taler måske om gennemsnitligt 200 poster pr. tabel om måneden, så det vil ikke være voldsomme mængder.
Avatar billede arne_v Ekspert
20. juli 2005 - 07:55 #3
med så få poster er det formentligt ligegyldigt hvordan du laver de forespørgsler

generelt er jeg lidt bekymret over performance for "multi level" queries så jeg er
ikke så glad for 1 query--N view--M table når vi snakker performance
Avatar billede dsj Nybegynder
20. juli 2005 - 08:02 #4
Det eneste du kan gøre for at forbedre performance er, at oprette de rigtige indekseringer, dog ignorerer MS SQL indekseringer for tabeller med kun 1000-1500 rækker og nedefter, da det ikke kan betale sig performance-mæssigt.
Avatar billede dsj Nybegynder
20. juli 2005 - 08:04 #5
Views forbedre ikke umiddelbart performance - det er jo blot SELECT-statements. Dog kan MS SQL arbejde med indekserede views, men så kan man lige så godt indeksere tabellerne og undgå views.
Avatar billede beef12 Nybegynder
20. juli 2005 - 11:56 #6
kommer indexerede views ikke først i Sql server 2005?
Avatar billede dsj Nybegynder
20. juli 2005 - 13:52 #7
Avatar billede beef12 Nybegynder
20. juli 2005 - 14:07 #8
Hmmm - jeg er skeptisk :-)
Mener de ikke bare at den bruger indexes fra de tabeller view'et selecet'er fra.

Hvis det kan lade sig gøre i 2000, ville det være fedt. Men jeg har aldrig stødt på at man kan...

Jeg testede lige med:
CREATE INDEX IDX_TEST ON testview ([test_id])

Så får jeg en fejl. Har du et stump sql der viser hvordan man laver de indexes? For så skal jeg nok bøje mig :-)
Avatar billede dsj Nybegynder
20. juli 2005 - 14:16 #9
Jeg har aldrig brugt det selv, da jeg mener at man kan gøre det ligeså godt uden indexerede views, og derfor bør undgå dem - keep it simple. På følgende link forklarer de brugen af dem: http://www.databasejournal.com/features/mssql/article.php/10894_2119721_3
Avatar billede dsj Nybegynder
20. juli 2005 - 14:18 #10
Og med den udtalelse mener jeg, at man kan opnå en mindst lige så god performance uden views som med og derfor bør undgå dem i det hele taget, med mindre man anvender dem af sikkerhedsmæssige eller andre årsager.
Avatar billede dsj Nybegynder
20. juli 2005 - 14:21 #11
Indexerede views kan dog vise sig meget nyttige, hvis man står med et eksisterende system der skal opdateres, og ikke har muligheden for at omstrukturere tabeller mv. MS SQL kan nemlig gøre brug af indexerede views på eget initiativ - de medtages i query plannerens overvejelser...
Avatar billede dsj Nybegynder
20. juli 2005 - 14:22 #12
Argh - jeg mente ikke opdateres, men _optimeres_ :-)

Jeg må vidst hellere få lidt mere kaffe indenbors...
Avatar billede netro Nybegynder
20. juli 2005 - 16:13 #13
Okay, men det vil vel gå lidt hurtigere at lave et view, der kompileres på forhånd og allerede er parset for syntaksfejl, når det skal bruges - fremfor at have hele forespørgslen i applikationskoden?
Avatar billede arne_v Ekspert
20. juli 2005 - 16:18 #14
det er sådan set problemet

den optimale strategi når et view betragtes alene er ikke nødvendigvis den
optimale strategi når flere views skal joines sammen
Avatar billede dsj Nybegynder
20. juli 2005 - 16:39 #15
ikke-indekserede views parses så vidt jeg ved hver gang de anvendes.
Avatar billede netro Nybegynder
20. juli 2005 - 17:01 #16
Hmm... det troede jeg ikke.
Avatar billede dsj Nybegynder
20. juli 2005 - 17:12 #17
Der står lidt om views i det første link jeg postede, f.eks.:

"These views are used primarily to restrict users to a certain subset of data in one or more base tables for security reasons, and to enable developers to customize how users can logically view data stored in base tables."

Views er altså generelt ikke tænkt til brug ved optimeringer. Og:

"Nonindexed views are materialized at runtime. Any computations such as joins or aggregations are done during query execution for each query referencing the view."
Avatar billede netro Nybegynder
20. juli 2005 - 17:21 #18
Ok, men jeg kan heller ikke finde ud at lave et indekseret view.
Avatar billede netro Nybegynder
21. juli 2005 - 15:56 #19
Tak for hjælpen. Læg bare nogle svar.
Avatar billede dsj Nybegynder
21. juli 2005 - 15:56 #20
Svar.
Avatar billede arne_v Ekspert
22. juli 2005 - 22:04 #21
.
Avatar billede arne_v Ekspert
22. juli 2005 - 22:27 #22
følgende virker iøvrigt fint i MSDE 2000:

set quoted_identifier on
go
set arithabort on
go
select * from t1
go
create view v1 with schemabinding as select f1,f2 from dbo.t1
go
select * from v1
go
create unique clustered index ixv1f1 on v1(f1)
go
select * from v1
go
drop view v1
go
Avatar billede netro Nybegynder
23. juli 2005 - 04:47 #23
Er det en god idé at lave clustered index på primærnøgler?
Avatar billede dsj Nybegynder
23. juli 2005 - 13:29 #24
Det er det ofte. Et clustered index angiver den rækkefølge data ligger placeret på harddisken. Det betyder, at hvis du joiner på primærnøglen vil data være meget hurtige for databasen at læse - den skal ikke hente data forskellige steder fra på disken.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I dag 10:28 PDFEngine Af barth i Andet software
I går 22:40 Butte indhold i celler Af lurup i Excel
I går 15:24 Power Query Af djsimonsen i Excel
I går 14:43 Hvis ikke på liste, tilføj værdier til liste Af TheLibrarian i Excel
I går 11:33 Windows 11 Af ranni i Windows