我不清楚以下内容:
假设我有一个表A
,并且我在列X
上创建了一个索引。
如果我根据结果将被排序的列进行选择,对吧?
但是,如果由于某种原因,我做了一个选择,然后输入ORDER BY X
(例如,我不知道该列是否已编入索引),SQL服务器会执行顺序访问还是使用索引?在索引列上排序
在索引列上排序
回答
如果你没有在你的SELECT
查询指定ORDER BY
,那么就没有保证/不确定性任何种类的顺序。
的数据将被退回 - 但没有任何订单的保证(或者说,它会在你查询它相同的顺序下一次被退回)
所以,如果你需要一个订单 - 那么你必须在您的SELECT
中指定ORDER BY
- 就这么简单。
是的 - 如果有一个索引,如果它有意义 - 那么SQL Server查询优化器将确实使用该索引。但是有很多ifs和但是涉及 - 它可能 - 也可能不 - 使用索引 - 完全由优化器决定(这取决于很多因素 - 这里列出的许多因素) 。
(这特别适用于SQL Server,我清楚地知道 - 我不知道其他RDBMS如何处理这种情况)
无论是否RDMS将使用索引与否取决于谓词您的SQL查询,其他指标都在桌子上和优化器如何选择执行查询..
所以,如果你有 选择,X FROM T 其中A = SOME_VALUE ORDER BY X
并且在A上有一个索引,那么RDMS可能(强调可能)选择通过该索引访问数据而不是T上的索引。这意味着SELECT后面会进行排序。
与大多数数据库的问题,答案是“这取决于”
没有ORDER BY在SELECT,那么就没有任何形式的确定性排序。
索引加排序是相当复杂的故事。它依赖于RDBMS,RDBMS版本和表中的数据。
1 000 000 rows in table
comment table
i - int, unique number from sequence/auto_increment etc.
created - long, indexed
updated - long, indexed
title - varchar(50) - indexed
body - text
选择:
SELECT id FROM comments;
的Oracle,MySQL和PostgreSQL回报记录完全随机。你可以有秩序的幻觉。但经过一些管理工作真空,表格分析,优化表格;一切都可以改变
SELECT * FROM comments ORDER BY created DESC;
PostgreSQL和Oracle将执行全表扫描。
SELECT created FROM comments ORDER BY created;
Oracle将执行完整索引扫描(仅索引数据),但PostgreSQL将执行全表扫描。
SELECT * FROM comments WHERE created>sysday-7 ORDER BY created DESC;
PostgreSQL和Oracle将执行索引范围扫描和从表中读取数据。
SELECT created FROM comments WHERE created>sysday-7 ORDER BY created;
Oracle将执行索引范围扫描(无从表读出的),但是PostgreSQL将执行索引范围扫描和从表中读出的数据。
- 1. 排序列上的索引
- 2. 排序“索引”阵列
- 3. 在排序数据上创建索引
- 4. 添加列排序索引到列标题多列排序
- 5. 阵列上的重新排列索引
- 6. 索引列未按升序排列
- 7. SQL索引标识列排序顺序
- 8. 排序后检索索引值Enum按字母顺序排列
- 9. 从排序在Perl列表索引排序和指数另一
- 10. 索引中的排序列表
- 11. 插入排序错误列表索引
- 12. 从排序列表中提取索引
- 13. 更改索引秩序排列
- 14. 重新索引排序系列
- 15. Ravendb:按日期降序排列索引
- 16. jqGrid排序索引按列名称
- 17. 排序和阵列保持索引值
- 18. Python列表排序和索引
- 19. 散列索引vs倒排索引
- 20. 在Ruby中获取数组排序的排列的索引?
- 21. 爪哇:排序列表从索引到索引
- 22. 按集群式列存储索引中的索引排序
- 23. mongodb索引查找索引排序
- 24. 在引导搜索引擎优化重新排序3列
- 25. 排序未排序索引的数组
- 26. 如何检查索引列上的排序?
- 27. 在单个阵列上按ArrayList索引(行)对三个阵列排序
- 28. 在使用tablesorter执行排序时获取列索引和排序顺序?
- 29. 通过索引列表在c中排序字符串列表#
- 30. 位排列索引字典
你是什么意思的“SQL服务器”。 Microsoft SQL Server或...? – iddqd 2013-02-25 12:18:05
@iddqd:任何sql服务器实现 – Cratylus 2013-02-25 12:19:53