SQL Server bu sorguyu hızlandırmak gerekiyor

oy
1
SELECT pe.prodtree_element_id prodID, pe.prodtree_element_name_s, li.line_name, av2.value
    FROM prodtree_element pe
    LEFT JOIN prodtree_link pl
        ON pe.prodtree_element_id = pl.to_prodtree_node_id
    LEFT JOIN line li
        ON pe.line_code = li.line_code
    INNER JOIN attribute_values av
        ON av.attribute_definition_id = #statusCode# 
    LEFT JOIN attribute_values av2
        ON pe.prodtree_element_id = av.prodtree_element_id
    WHERE pe.prodtree_element_func_type <> 'WIZARD'
        AND pe.prodtree_element_topo_type = 'NODE'

# StatusCode # nitelik tanımı tablosunda bir id ile eşleşen bir statik id (argümanının uğruna 22 diyelim). Sorun, sorgu sırasında herhangi aklı başında miktarda bitirme bazı büyük sorun vardır vardır. büyük sorun aslındasensin daha erken bitirmek gerekir, ancak kayıtların sayısı, (30-50,000 civarında) geri çekmek zorunda olduğu çok büyüktür. Bunun yavaşlamaya başlar olan nerede birden fazla tablodan veri gerekir. Bu sadece, ben de geçerli prodtree_elment_id eşleşen veri değerinde bütün bir diğer tablolar ne gerek ihtiyacım parçasıdır.

Ben ColdFusion kullanan ama (hatta bitirir) bile 2005 Bu sorgu için 15-30 + dakika bekleme oluşturur SQL Server doğrudan sorgu çalıştırıyorum. en fazla 5 dakika veya daha az olması için bu sorguyu hızlandırmak için herhangi bir akla yolu var mı?

Oluştur 09/12/2008 saat 20:54
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
9

INNER JOIN attribute_values av
    ON av.attribute_definition_id = #statusCode# 
LEFT JOIN attribute_values av2
    ON pe.prodtree_element_id = av.prodtree_element_id

Sorun bu. Çapraz birleştirme üzerine, bir dış, ardından bir çapraz pe ve av arasındaki birleşme yoktur katılması. Sen sadece :-) 30 dakika sürer şanslısın

Bunu istemek düşünüyorum:

SELECT pe.prodtree_element_id prodID, pe.prodtree_element_name_s, li.line_name, av2.value
FROM prodtree_element pe
LEFT JOIN prodtree_link pl
    ON pe.prodtree_element_id = pl.to_prodtree_node_id
LEFT JOIN line li
    ON pe.line_code = li.line_code
--replacement
LEFT JOIN
attribute_values av 
         ON pe.prodtree_element_id = av.prodtree_element_id AND
         av.attribute_definition_id = #statusCode# 
--end replacement
WHERE pe.prodtree_element_func_type <> 'WIZARD'
    AND pe.prodtree_element_topo_type = 'NODE'
Cevap 09/12/2008 saat 21:05
kaynak kullanıcı

oy
0
SELECT pe.prodtree_element_id prodID, pe.prodtree_element_name_s, li.line_name, av2.value
    FROM prodtree_element pe
    LEFT JOIN prodtree_link pl
        ON (pe.prodtree_element_id = pl.to_prodtree_node_id)
    LEFT JOIN line li
        ON (pe.line_code = li.line_code)
    LEFT JOIN attribute_values av2
        ON (pe.prodtree_element_id IN (SELECT av.prodtree_element_id FROM attribute_values av WHERE av.attribute_definition_id = #statusCode#))
    WHERE pe.prodtree_element_func_type <> 'WIZARD'
        AND pe.prodtree_element_topo_type = 'NODE'

GBN Bence bunu çivilenmiş. Eğer İÇ belirli bir değere attribute_values ​​için JOIN kısıtlamak rağmen, hala birincil tablo veya onun ilişkilere tüm birleştirilmiş değildir. Eğer sorgudan sonuçlar elde bile Yani, benim tahminim çok fazla olmasıdır.

Eğer amaçlanan ne ve nasıl bağlı veri attribute_values ​​tablosunun onun sorgu olduğu veya mayın muhtemelen daha hızlı olacaktır.

Cevap 09/12/2008 saat 21:15
kaynak kullanıcı

oy
0

Aşağıdaki harita eğer emin tüm kimliklerinizi Endeksleri da yapmak:

pe.prodtree_element_func_type <> 'WIZARD'
        AND pe.prodtree_element_topo_type = 'NODE'

gibi bir şey olmalı

pe.prodtree_element_func_type_ID <> 1
            AND pe.prodtree_element_topo_type_ID = 2

tamamlamak için daha fazla zaman alır dize karşılaştırmaları azaltmak için

Cevap 09/12/2008 saat 21:07
kaynak kullanıcı

oy
0

İyi optimizasyonu ile birkaç saniye içinde kayıtları milyonlarca arama yapabilirsiniz. StingyJack DDL bilmeden o doğru olmasına rağmen, herhangi bir sorgu optimizasyonu zor.

gerçi bir sorgu optimize yürütme planını bakmak olduğunda şeyler olsa yapmak. İç içe döngüler ve benzeri kötü. Ayrıca tam yanı endeksli olduğundan emin olun. Söz konusu tabloların indeksler şey söz. endeksler olmadan 30 - birçok birleştirmeler ile 50 bin satırdan bir süre alabilir.

Cevap 09/12/2008 saat 21:06
kaynak kullanıcı

oy
0

Öneririm ilk şey yüklü buna sahip sağlayarak kurumsal yöneticisi sql iyileştirici yardımcı programı aracılığıyla çalıştırmak olmasıdır. Genellikle sorgu hızı üzerinde olumlu bir etkiye sahip olabilecek böyle endeksler ve şeyleri önerir.

dikkate almak başka şeyler sorgusunu bölme olacaktır. Belirli bir özellik (veya böyle bir şey) Verdiğiniz değerle eşleşen olan tüm ürün elemanlarını okuduğunuz gibi ilk bakışları itibaren görünüyor. Belki öneririm:

select * from [bigLongjoin to producttree_element]
where prodtree_element_id
in(
select prodtree_element_id from 
  attribute_values where attribute_definition_id = #statusCode#)

sorgu planı görüntülenen kurumsal yöneticisi bunu Koşu olabilir ayrıca şişe boyunları olduğunu görmenize

Cevap 09/12/2008 saat 21:03
kaynak kullanıcı

oy
0

testine onun çok sert DDL bilmeden. 30-50K satırlar hala sadece birkaç saniye sürer.

burada fıkra sipariş geçmeyi deneyin. Muhtemelen bu uygulamış olmaları gerekmektedir

 INNER JOIN attribute_values av
        ON av.attribute_definition_id = #statusCode# 

Nerede yan tümcesinde.

Cevap 09/12/2008 saat 21:01
kaynak kullanıcı

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