Kra*_*ken 4 sybase order-by select
在我的 sybase 12 中,当我查看 select distinct 查询GETSORTED
的 showplan 时,我看到了 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.
Run Code Online (Sandbox Code Playgroud)
询问:
select distinct col_1 from tab_1
Run Code Online (Sandbox Code Playgroud)
我正在将应用程序从 Sybase 12 迁移到 Sybase 15。我发现数据排序存在差异,这进一步导致了下游的差异。我不能使用 anORDER BY
因为我不想接触现有的应用程序。如果我能弄清楚GETSORTED
正在做什么,我可能可以在我的新数据服务器上执行相同的命令。
您在执行计划中看到的是 Sybase 正在执行DISTINCT
操作符。
当您SELECT DISTINCT
在 Sybase 中执行 a 时,它首先构建一个工作表(如您在执行计划的第 1 步中看到的那样),然后它选择已排序的数据以从该工作表中删除重复项(这就是您在第 2 步中看到的)。这是记录在案的
排序算法似乎没有公开,所以如果 Sybase 开发人员尽其所能引入优化,他们使用数据长度来确定值是否重复,这可能会产生您所描述的效果:
我有理由相信它对不同行的列中数据的大小进行排序,而对于相同长度的行,它会按字母顺序排序
这个故事的寓意是:
如果您希望对数据进行排序,请添加 ORDER BY 子句
至于你的问题
GETSORTED 实际上以什么顺序对数据进行排序?
按照算法可以最有效地删除重复项的顺序。
归档时间: |
|
查看次数: |
171 次 |
最近记录: |