Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Self join, bästa prestanda?

Postades av 2003-08-29 15:06:06 - Marcus Johansson, i forum sql-server/msde, Tråden har 6 Kommentarer och lästs av 751 personer


Har två tabeller med produktData.

product - id,product_id,----
product_content - id,product_id, field_id,content

För att få den data jag behöver i en fråga måste jag göra en selfJoin: ( tror jag )

...men är detta det bästa sättet, frågan käns långsam?
DB är stor och content, product_conten fält har typen nvarchar(8000), vilket ej går att ändra.

SELECT DISTINCT pc.product_id,pc.content ProductName,pc2.content ProdctDescr
FROM product p
JOIN product_content pc ON p.product_id = pc.product_id
JOIN product_content pc2 ON p.product_id = pc2.product_id
WHERE pc.descr_fieldname_id = 44 --ProdctDescr


Svara

Sv: Self join, bästa prestanda?

Postades av 2003-08-29 15:31:51 - Christoffer Hedgate

>För att få den data jag behöver i en fråga måste jag göra en selfJoin: ( tror jag )

Vilken är den data du behöver då? Jag tror inte du behöver en self join, och du gör dessutom ingen selfjoin i det exempel du skrev.

product - id,product_id,----
product_content - id,product_id, field_id,content

>...content, product_conten fält har typen nvarchar(8000), vilket ej går att ändra.

Det finns ingen anledning att ha datatyp nvarchar(8000) på en kolumn eftersom du ändå inte kan lagra mer än 4030 tecken i den (cirka, beroende på andra kolumner i tabellen) eftersom varje tecken tar två bytes lagringsplats.

Att frågan känns långsam beror väl på dåliga index. Dessutom ser den inte korrekt ut, borde det inte vara WHERE pc2.descr_fieldname_id = 44 --ProdctDescr?


Svara

Sv: Self join, bästa prestanda?

Postades av 2003-08-29 15:41:10 - Marcus Johansson

kör nvarchar för jag använder unicode, och behöver lagra mycket text.


berhöver få ut allt i en query, product_contnent besrkiver namn, storlek, år etc
allt detta finns i content fältet och styrs via field_id.

måste joina på product_id


Svara

Sv: Self join, bästa prestanda?

Postades av 2003-08-29 16:00:27 - Andreas Hillqvist

Som jag antar det vill du slå upp två av egenskaperna för en produkt från product_content tabellen:

SELECT DISTINCT pc.product_id, pc.content ProductName, pc2.content ProdctDescr
FROM product p LEFT OUTER JOIN
product_content pc ON p.product_id = pc.product_id AND pc.descr_fieldname_id = 43 LEFT OUTER JOIN
product_content pc2 ON p.product_id = pc2.product_id AND pc2.descr_fieldname_id = 44


Om det är så att descr_fieldname_id för ProductName är 43 och 44 för ProdctDescr.


Svara

Sv: Self join, bästa prestanda?

Postades av 2003-08-29 16:12:36 - Marcus Johansson

Jo visst det är så jag vill ha det men det jag bara ha de som matchar med product tabellen. Så jag tror detta funkar . Tack!

SELECT DISTINCT pc.product_id, pc.content ProductName, pc2.content ProdctDescr
FROM product p
JOIN product_content pc ON p.product_id = pc.product_id AND pc.descr_fieldname_id = 43
JOIN product_content pc2 ON p.product_id = pc2.product_id AND pc2.descr_fieldname_id = 44


Fattar dock inte skillnaden då jag tidigare använde :

WHERE AC.DESCR_FIELDNAME_ID = 44
AND AC2.DESCR_FIELDNAME_ID = 41

Eller är det någon skillnad, får exakt samma resultat....jag är nog bara seg, det är ju fredag! Tack ändå





Svara

Sv: Self join, bästa prestanda?

Postades av 2003-08-30 15:52:19 - Christoffer Hedgate

Men du kan som sagt bara lagra drygt 4000 tecken i en nvarchar-kolumn, hur mycket du än vill lagra mer. En rad i SQL Server kan max vara 8KB stor vilket ger ungefär 8060 bytes plus overhead. Eftersom unicode tar 2 bytes att lara för varje tecken så kan du max ha 4030 tecken, minus andra kolumners storlek.

Designen låter lite tveksam, constraints blir t ex onödigt svåra att uttrycka, men den fungerar väl så visst.

Att du joinar på product_id gör det inte till en self join, den görs från en tabell till samma tabell igen.


Svara

Sv: Self join, bästa prestanda?

Postades av 2003-08-31 02:34:42 - Andreas Hillqvist

Varför använder du inte en LEFT OUTER JOIN som jag föreslagit? Det finns risk för du inte får med dig alla data annars. Det poster som saknar något värde som matchar nåon av joinerna kommer inte med i resultatet annars.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
551
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies