如果关系上没有索引,SQL 查询是不是会起作用?

Posted

技术标签:

【中文标题】如果关系上没有索引,SQL 查询是不是会起作用?【英文标题】:Whether SQL query will work if there are no indexes on the relations?如果关系上没有索引,SQL 查询是否会起作用? 【发布时间】:2015-12-09 04:10:00 【问题描述】:

GATE1999_2.25

下列哪项是正确的?

A) An SQL query automatically eliminates duplicates
B) An SQL query will not work if there are no indexes on the relations
C) SQL permits attribute names to be repeated in the same relation
D) None of the above

这是 1999 年 GATE 竞赛考试题。 A和C选项很容易排除,请回答B选项是否正确,为什么?

我浏览了多个数据库的SQL章节,也上网搜索过,但没有找到任何关于索引对SQL查询的影响的参考资料,可以回答这个问题。

【问题讨论】:

来自en.wikipedia.org/wiki/SQL:“该标准没有在几个重要领域(例如索引、文件托管...)中指定数据库行为,让实现来决定如何表现......” SQL“关系”可以有重复的“属性”名称。但是,SQL 基本变量不能包含其中之一。例如SELECT * FROM t a JOIN t b. 【参考方案1】:

在任何合理的数据库中,您都可以创建一个没有索引或键的表(这将隐式生成索引),将数据插入其中并进行查询。

请考虑以下内容(语法可能略有不同,具体取决于您使用的 RDBMS,尽管我已尝试尽可能通用):

CREATE TABLE mytable (mycol INT);

INSERT INTO mytable VALUES (1);

SELECT * FROM mytable;

没有任何索引,查询工作完美。答案 B 不正确。

【讨论】:

哦。实际上这就是我的困惑,总是创建隐式索引。由于索引总是隐式创建的,这种不创建索引的情况并没有真正出现。虽然我们不需要创建显式索引 B 是不正确的!这个 GATE 问题有点令人困惑!谢谢:) @abcd 如果您不声明索引,但 DBMS 在内部执行如果您声明了索引会执行的操作,或者如果您确实声明了索引但 DBMS 在内部执行它会执行的操作如果你没有声明一个,那么这是关于它的实现的细节,而不是关于 SQL 的。 SQL 索引是您显式或隐式声明的在概念上存在的事物,例如基表或约束。 PRIMARY KEY 或 UNIQUE 约束隐式声明一个索引,就好像你已经显式声明了一个。【参考方案2】:

SQL 查询不会自动消除重复,明确地我们必须使用 distinct 关键字从结果集中删除重复。

如果没有索引,它会自动创建索引。

两列不能有相同的名称。

以上都不是真的

【讨论】:

以上是关于如果关系上没有索引,SQL 查询是不是会起作用?的主要内容,如果未能解决你的问题,请参考以下文章

mysql中date_sub索引会起作用吗

SQL语言之索引

MySQL 是不是使用现有索引来创建新索引?

MySQL慢SQL语句常见诱因

ORACLE 快速查询数据SQL语句

好程序员Java分享SQL语言之索引