2017-04-16 70 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>條件可能會或可能不會成立,控制將轉到選擇列