Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

UNION SEMUA Kinerja DI SQL Server 2005

Pastikan Anda menghapus cache eksekusi + data di antara setiap uji coba.

misalnya

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

Jika Anda menjalankan dengan UNION ALL terlebih dahulu, dan kemudian menjalankan 2 pilihan secara terpisah setelahnya, data sudah akan di-cache di memori sehingga membuat kinerja jauh lebih baik (oleh karena itu memberikan kesan yang salah bahwa pendekatan selanjutnya lebih cepat padahal mungkin tidak).

Jika Anda menggunakan UNION maka itu mungkin lebih lambat karena harus menerapkan DISTINCT, tetapi UNION ALL tidak harus melakukan itu sehingga seharusnya tidak berbeda.

Pembaruan:
Lihatlah rencana eksekusi dan bandingkan - lihat apakah ada perbedaan. Anda dapat melihat rencana eksekusi dengan mengklik tombol "Sertakan Rencana Eksekusi Aktual" di SSMS sebelum menjalankan kueri

Pembaruan 2:
Berdasarkan CTE lengkap yang diberikan, saya pikir saya akan mencari cara untuk mengoptimalkannya - menurut saya UNION ALL bukanlah masalahnya.

IMHO, hal terbaik untuk dicoba adalah bekerja melalui CTE satu per satu dan mencoba mengoptimalkan masing-masing secara individual sehingga ketika Anda menggabungkan semuanya dalam kueri utama, kinerjanya lebih baik.

misalnya untuk tDictionaryStreets, bagaimana kalau mencoba ini:

SELECT DISTINCT
    r.KladrItemName AS RegionName,
        a.KladrItemName AS AreaName,
        c.KladrItemName AS CityName,
        sc.KladrItemName AS SubCityName,
        s.StreetName      
FROM StreetNames s
    JOIN tFoundStreets fs ON s.StreetName = fs.KladrItemName
    LEFT JOIN tFoundRegions r ON s.RegionName = r.KladrItemName
    LEFT JOIN tFoundAreas a ON s.AreaName = a.KladrItemName
    LEFT JOIN tFoundCities c ON s.CityName = c.KladrItemName
    LEFT JOIN tFoundSubCities sc ON s.SubCityName = scc.KladrItemName

KladrItemName di setiap tabel setidaknya harus memiliki indeks aktif.Coba kerjakan ulang tDictionarySubCities dengan cara yang sama dengan join juga.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa secara terprogram memeriksa (mengurai) validitas pernyataan TSQL?

  2. Cara menghapus baris secara efisien saat TIDAK menggunakan Tabel Truncate dalam tabel 500.000+ baris

  3. Cara sederhana untuk mendapatkan semua prosedur tersimpan secara terprogram

  4. Masalah sinkronisasi database SQL Server

  5. Di SQLServer 2012 TSQL, apa perbedaan menggunakan XML RAW, XML AUTO dan XML PATH