msdn documentation bizSELECT TOP, herhangi bir sipariş belirtilmemişken nasıl çalışır?
SELECT TOP(N) ..... ORDER BY [COLUMN]
yazarken Biz column
(asc
veya desc
seçtiğimiz şeye bağlı olarak) Ama hiç belirtmek yoksa göre sıralanır üst (n) satır olsun diyor msdn, Gail Erickson
'un here'a işaret ettiği gibi random
diyor. O işaret ettiği gibi o zaman random
unspecified
olmalıdır. Ancak orada
, sonuç grubu sipariş satırları birinci N sayısı ile sınırlı olduğu
Thomas Lee
noktaları olarak; aksi takdirde satırların ilk N sayısı ilk bu koştum,
Yani, herhangi bir dizin olmayan bir tablo üzerinde bu sorguyu ran Ramdom döner .. sonra
SELECT *
FROM
sys.objects so
WHERE
so.object_id NOT IN (SELECT si.object_id
FROM
sys.index_columns si)
AND so.type_desc = N'USER_TABLE'
Ve Bu tablolardan birinde, (aslında yukarıdaki sorgu ile döndürülen tüm tablolarda aşağıdaki sorguyu denedim) ve Her zaman aynı satırları aldım.
..
SELECT TOP (2) *
FROM
MstConfigSettings
Bu her zaman aynı 2 satır döndü ve 3 adımları gösterir aynı yürütme planları Şimdi sorgunun 1. tarafından döndürülen tüm diğer tablolar için geçerlidir yapabilirsiniz gibi bakmak, sadece saf bir tablo taraması hiçbir indeks var olduğunu görmek ve
Top
, gerçek satır 2'yi 2 olarak gösterir ve Table Scan
; Durum böyle değil (birçok satır var).
Ama
SELECT TOP (2) *
FROM
MstConfigSettings
ORDER BY
DefaultItemId
gibi bir şey çalıştırdığınızda ben ORDER BY
uygulanamadığı durumlarda, yürütme planı,
ve
Yanigösteriradımlar farklıdır (çeşit yoktur). Ancak, bu TOP
, Sort
yok olduğunda nasıl çalışır ve neden her zaman aynı sonucu verir?
Veritabanına eklendikleri tarihe kadar sipariş edildiğini düşündüm. En eski ilk. – mattytommo
dbms uygulamasına bağlıdır, bu nedenle 'order' olmaksızın 'top', uygulama tanımlı bir özelliktir – AnatolyS
@AnatolyS - 'TOP' standart SQL değilse ve soru SQL Server olarak etiketlenmiştir. –