Select
按 GETSORTED 排序
在我的 sybase 12 中,當我查看 select distinct 查詢的 showplan 時,我看到
GETSORTED
了 showplan 的輸出。我已經搜尋了整個網際網路(是的!),我似乎無法找到一個連結來說明實際對數據進行排序的順序
GETSORTED
?我有理由相信它會對不同行的列中數據的大小進行排序,對於相同長度的行,它會按字母順序排序。
執行計劃:
W (5): STEP 1 W (6): The type of query is INSERT. W (7): The update mode is direct. W (8): Worktable1 created, in allpages locking mode, for DISTINCT. W (9): W (10): FROM TABLE W (11): tablename W (12): Nested iteration. W (13): Table Scan. W (14): Forward scan. W (15): Positioning at start of table. W (16): Using I/O Size 2 Kbytes for data pages. W (17): With LRU Buffer Replacement Strategy for data pages. W (18): TO TABLE W (19): Worktable1. W (20): W (21): STEP 2 W (22): The type of query is SELECT. W (23): This step involves sorting. W (24): W (25): FROM TABLE W (26): Worktable1. W (27): Using GETSORTED W (28): Table Scan. W (29): Forward scan. W (30): Positioning at start of table. W (31): Using I/O Size 2 Kbytes for data pages. W (32): With MRU Buffer Replacement Strategy for data pages.
詢問:
select distinct col_1 from tab_1
我正在將應用程序從 Sybase 12 遷移到 Sybase 15。我發現數據順序存在差異,這進一步導致下游差異。我不能使用 an
ORDER BY
因為我不想接觸現有的應用程序。如果我能弄清楚在GETSORTED
做什麼,我可能可以在我的新數據伺服器上執行相同的命令。
您在執行計劃中看到的是 Sybase 執行
DISTINCT
運算符。當您
SELECT DISTINCT
在 Sybase 中執行 a 時,它首先建構一個工作表(如您在執行計劃的第 1 步中所見),然後它選擇已排序的數據,從該工作表中刪除重複項(您在第 2 步中看到的內容)。這是記錄在案的排序算法似乎沒有公開,所以如果 Sybase 開發人員盡其智慧引入了一種優化,他們使用數據長度來確定值是否重複,這可能會產生您所描述的效果:
我有理由相信它對不同行的列中數據的大小進行排序,對於相同長度的行,它會按字母順序排序
這個故事的寓意是:
如果要對數據進行排序,請添加 ORDER BY 子句
至於你的問題
GETSORTED 實際上以什麼順序對數據進行排序?
按照算法可以最有效地刪除重複項的順序。