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

Mengapa SQL Server 2008 memesan saat menggunakan GROUP BY dan tidak ada urutan yang ditentukan?

Untuk menjawab pertanyaan ini, lihat rencana kueri yang dihasilkan oleh keduanya.

SELECT pertama adalah pemindaian tabel sederhana, yang berarti menghasilkan baris dalam urutan alokasi. Karena ini adalah tabel baru, ini cocok dengan urutan Anda memasukkan catatan.

SELECT kedua menambahkan GROUP BY, yang diimplementasikan SQL Server melalui pengurutan yang berbeda karena perkiraan jumlah baris sangat rendah. Apakah Anda memiliki lebih banyak baris atau menambahkan agregat ke SELECT Anda, operator ini dapat berubah.

Misalnya, coba:

CREATE TABLE #Values ( FieldValue varchar(50) )

;WITH FieldValues AS
(
    SELECT '4' FieldValue UNION ALL
    SELECT '3' FieldValue UNION ALL
    SELECT '2' FieldValue UNION ALL
    SELECT '1' FieldValue
)
INSERT INTO #Values ( FieldValue )
SELECT
    A.FieldValue
FROM FieldValues A
CROSS JOIN FieldValues B
CROSS JOIN FieldValues C
CROSS JOIN FieldValues D
CROSS JOIN FieldValues E
CROSS JOIN FieldValues F

SELECT
    FieldValue
FROM #Values
GROUP BY
    FieldValue

DROP TABLE #Values

Karena jumlah baris, ini berubah menjadi agregat hash, dan sekarang tidak ada pengurutan dalam rencana kueri.

Tanpa ORDER BY, SQL Server dapat mengembalikan hasil dalam urutan apa pun, dan urutan kembalinya adalah efek samping dari cara yang dianggapnya paling cepat mengembalikan data.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Impor SQL Massal dari CSV

  2. Manajemen Indeks SQL Server Menggunakan Manajer Indeks untuk SQL Server

  3. Menampilkan tanggal dalam kuartal tahun keuangan

  4. Tambahkan kolom tabel baru ke posisi ordinal tertentu di Microsoft SQL Server

  5. Menggunakan Alias ​​​​di Mana Klausul atau Opsi Alternatif?