Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Sorgusundan dönen bilgilileri tekrar alma?
#11
Sorun çözüme ulaşmış görünüyor fakat bir kenarda bilgi olarak bulunsun belki bir gün lazım olur

Temp tablolarda fiziksel tablolar gibi NONCLUSTERED ve CLUSTERED INDEX ler ile birlikte kullanılabilir.

sorgularınızın sonunda bu tabloları delete etmenizde server açısından bir avantaj sağlıyacaktır.

Sorgunuzun başına ve/veya sonuna aşağıdaki şekilde bir ekleme yapmanızı öneririm.
    
If OBJECT_ID('tempdb..#Tmp_XXXXX') IS NOT NULL 
    DROP TABLE #Tmp_XXXXX


Ayrıca daha detaylı bilgiye de bu kısımdan ulaşmanız mümkündür.
https://www.sqlshack.com/indexing-sql-se...ry-tables/

(30-01-2023, Saat: 12:53)m_ekici Adlı Kullanıcıdan Alıntı: #GeciciTablo isminde bir tablo oluşturduğumda tablo aşağıdaki gibi görünüyor. (Ben select i #GeciciTablo olarak kullanabiliyorum)  

[dbo].[#GeciciTablo________________________________________________________________________________________________________000000000051]

bu benim yaptığım bir hatadan mı oluşuyor, yoksa SQL mi bu şekilde isimlendiriyor?

SQL kendisi yapıyor
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#12
        QTMP('IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''dbo'' ' +
                  'AND TABLE_NAME = '+QuotedStr(GecTblAdi)+')) ' +
                 'BEGIN DROP TABLE '+GecTblAdi+' END' ,2);

kodunu eklemiştim, tşk
Cevapla
#13
Photo 
geçici tabloyu sql serverda tutmak yerine Ram de de tutabilirsiniz.
declare @Snc table (ID int , Adi varchar(20), Tel varchar(20))

insert into @Snc (ID,Adi,Tel)
select  1,'Ahmet','123123'
union all
select  2,'mehmet','123789'
union all
select  3,'Ayşe','458989'

select * from @Snc

select * from @Snc where Adi like 'A%'


Ek Dosyalar Resimler
   
Cevapla
#14
@endmuh
bakış açınız kısmen doğru burada dikkat edilmesi gereken Temp dosyayı disk üzerinde mi? Ram üzerinde mi? açmaya karar vermek
Arkadaşımızın belirtiği kayıt sayılarını göz önüne alırsak ram de temp dosya açmak pek doğru gelmiyor benim fikrimce.
Bazı sorgular vardırki eş zamanlı çok sayıda yapılabilir bu durumlarda ram üzerinde temp dosya açmak ciddi sorunlara yol açabilir
Bu konuyu göz ardı etmemek gerek diye düşünüyorum.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#15
(27-01-2023, Saat: 14:49)m_ekici Adlı Kullanıcıdan Alıntı: Merhaba
MS SQL den malzeme listesini (60 bin kayıt içinden) filtreleyerek çekiyorum. Gelmesi 3-4 sn. sürüyor. Gelen bu liste içerisindeki MARKA ları (tek olarak) almam lazım. Bu işlem için aynı queryi yi (Marka alacak şekilde) tekrar gönderiyorum. Bu da toplamda sonucun 7-8 sn. de dönmesine neden oluyor. 
İlk QUERY ile gelen sonuç içerinden MARKA ları almak veya farklı bir yöntem var mı?

İyi Çalışmalar

Sorguyu select * from tabloadı şeklinde değilde sadece marka istiyorsan select marka from tabloadı şeklinde yap.
Cevapla
#16
Merhaba öncelikle yapılacak iş Marka alanı için bir non clustered index tanımlayınız bu çok önemli.
ardından markaları dönen sonuçlardan değil, doğrudan veritabanı tablonuzdan alınız. çünkü index yardımı ile çok daha hızlı gelecektir.
sorgunuz şöyle olmalıdır.

SELECT DISTINCT Marka
from TabloAdi

Yerinizde olsam bu sorguyu bir view olarak kaydederim ve
bir storedproc içine de SELECT * FROM viewAdi şeklinde kodlarım.
Sonra uygulamamdan storedproc'u çağırırım. view bu konuda execation süresi bakımından avantaj sağlayacaktır.

Tabi belirli peryotlarda indexin durumları incelenmeli ve gerekiyorsa bakımı yapılmalı. (rebuild vs .. ). Bu başlı başına bir konu.
Cevapla
#17
Merhaba 60.000 Kayıt bir anda çekmek yerine Top 1000 olarak 1000.er kayıt çekseniz ve daha sonra LIKE ile filtreleme ekleyip aradığınız Marka sonuçlarını görüntüleseniz daha hızlı olmaz mı ?
Cevapla
#18
Merhaba
Stokta kayıtlı 60 bin civarı stok var, bunlardan her müşterinin görmesi gereken farklı sayılarda. O müşteri girdiğinde kaç tane görmesi gerekiyorsa o kadar stoğun içinden markaları alıp marka sorgusu için farklı bir comboda gösteriyorum.

İlginize teşekkür ederim, bu işlem geçici tablo ile hallettim.
Her müşteri girdiğinde o müşteriye özel bir geçici tablo oluşturuyorum (İlk girişte 3-4 sn bekleme oluyor). Müşteri programdan çıkana kadar sorgularında o tabloyu kullanıyor.
Cevapla
#19
(21-08-2023, Saat: 14:51)m_ekici Adlı Kullanıcıdan Alıntı: Merhaba
Stokta kayıtlı 60 bin civarı stok var, bunlardan her müşterinin görmesi gereken farklı sayılarda. O müşteri girdiğinde kaç tane görmesi gerekiyorsa o kadar stoğun içinden markaları alıp marka sorgusu için farklı bir comboda gösteriyorum.

İlginize teşekkür ederim, bu işlem geçici tablo ile hallettim.
Her müşteri girdiğinde o müşteriye özel bir geçici tablo oluşturuyorum (İlk girişte 3-4 sn bekleme oluyor). Müşteri programdan çıkana kadar sorgularında o tabloyu kullanıyor.

3 - 4 sn bekleme böyle bir sorgu için gerçekten uzun süre. 

Müşteri girdiğinde kaç tane görmesi gerekiyorsa
Önerim şudur;

CREATE VIEW dbo.vMarka
AS
         
 Select Distinct s.Marka
 From StokTablo s

END

CREATE PROCEDURE dbo.MarkaGetir (@MarkaAdet int=NULL)
AS
BEGIN
         
 Select TOP (@MarkaAdet)  a.Marka
 From vMarka a
 --where .... gereken şartlar

END

Yaklaşık 700.000 kayıt üzerinden 500 adetlik sorgu yaptım sonuç:
500 row(s) returned (execution time: 32 ms; total time: 172 ms)

Tabi hangi çözümün kullanacağınız sizin bileceğiniz durum. Kolay gelsin
Cevapla
#20
(21-08-2023, Saat: 15:28)serdar Adlı Kullanıcıdan Alıntı:
(21-08-2023, Saat: 14:51)m_ekici Adlı Kullanıcıdan Alıntı: Merhaba
Stokta kayıtlı 60 bin civarı stok var, bunlardan her müşterinin görmesi gereken farklı sayılarda. O müşteri girdiğinde kaç tane görmesi gerekiyorsa o kadar stoğun içinden markaları alıp marka sorgusu için farklı bir comboda gösteriyorum.

İlginize teşekkür ederim, bu işlem geçici tablo ile hallettim.
Her müşteri girdiğinde o müşteriye özel bir geçici tablo oluşturuyorum (İlk girişte 3-4 sn bekleme oluyor). Müşteri programdan çıkana kadar sorgularında o tabloyu kullanıyor.

3 - 4 sn bekleme böyle bir sorgu için gerçekten uzun süre. 

Müşteri girdiğinde kaç tane görmesi gerekiyorsa
Önerim şudur;

CREATE VIEW dbo.vMarka
AS
         
 Select Distinct s.Marka
 From StokTablo s

END

CREATE PROCEDURE dbo.MarkaGetir (@MarkaAdet int=NULL)
AS
BEGIN
         
 Select TOP (@MarkaAdet)  a.Marka
 From vMarka a
 --where .... gereken şartlar

END

Yaklaşık 700.000 kayıt üzerinden 500 adetlik sorgu yaptım sonuç:
500 row(s) returned (execution time: 32 ms; total time: 172 ms)

Tabi hangi çözümün kullanacağınız sizin bileceğiniz durum. Kolay gelsin

Server çok yeni değil. Sadece Malzeme Listesi almıyorum, Malzemeye ait, ambar (15 adet) durumları, kampanya, iskonto bilgileri ni toplayıp getiriyor. 
İlk girişte olduğu için çok sıkıntı yaşamıyoruz. Sonraki aramalar çok hızlı oluyor.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MS SQL ile Merkez Bankası Döviz Kurları Alma adelphiforumz 2 6.283 25-03-2019, Saat: 21:49
Son Yorum: Bay_Y
  Store Procedure içinden hata alma Bay_Y 4 5.047 23-05-2018, Saat: 12:34
Son Yorum: Bay_Y
  Database'in Scriptini Alma. Mericx 9 10.293 07-03-2017, Saat: 16:30
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi