2017-04-16 138 views
-1

我想提取表(聘用)的个人记录,我写查询数据库SQL访问

SELECT * 
FROM employ 
WHERE employ_Id=some_specific_id 

现在我的问题是什么这个查询做第一,意味着这将首先转到表(聘用)并选择所有记录,然后在其上应用过滤器或者只是转到表(聘用)并查找具有WHERE子句后给定的特定ID的雇佣记录。

+0

想象一张具有10亿记录的表格。什么是聪明的做法?然后阅读有关索引。 –

+0

检查执行计划,你会知道 –

+0

如果他问,他可能不知道该怎么做。也许给他一些关于如何做的建议? – SandPiper

回答

0

1)表记录大多按主键的顺序存储(称为聚簇索引)。所以,当你使用主键作为条件时,rdbms不需要扫描表(所有记录)

2)对于其他主键。 Rdbms检查索引是否在表上创建,如果可以用于你的where条件。所以,它可以避免全表扫描。

3)如果非上述情况是可能的,则执行全表扫描。

+0

“*表记录大多按主键的顺序存储*” - 这是不正确的。在Oracle中,“索引组织表”(相当于聚集索引)是**不是默认值。 –

+0

这就是为什么我主要使用单词。 –

+0

在Oracle中,IOT是个例外,所以行不按主键的顺序“存储”。 –

0

执行查询时,它将查看所​​有行,看它们是否与您的条件匹配。这就是为什么您拥有的数据越多,查询时间就越长。

如果你的条件是一个索引,因为我认为是你的查询的情况下,假设empId是该表的主键,那么搜索将只会在该排序的索引,这将是更快,因为不是所有行将需要检查。

0

1->首先,控件将检查user_tab数据字典中的表。

2->然后,如果该列存在对where条件的检查,则检查表中的列可用性。

3>条件可能会或可能不会成立,控制将转到选择列