2009-09-20 62 views
0

我正在構建一個相當龐大的數據庫 - 它有大約690萬條記錄。如何在SQL中使用索引

一個簡單的選擇需要6-7秒,所以我現在正在優化和調查其他選項。

顯而易見的是創建一個或兩個索引。

樣品:

CREATE INDEX 「INDEX_NAME」 ON 「表格名」(列)

運作良好。

但是,我無法獲得有效的sql語法以在select語句中使用索引。一個假設你可以使用「從table_name選擇index_name」,至少我做了:)但是它似乎是無效的,我不能在我的生活中找到一個網上的例子,這或者意味着我來自完全錯誤的角度,或沒有人記錄它...

任何關於如何使用索引的幫助將不勝感激!

+0

你對錶中的任何主鍵?如果你這樣做,那麼主鍵將在表上創建聚集索引。如果你有另一個唯一索引表,將在表上創建非聚集索引。還有一件事會影響你的表現,就是你的索引字段的大小。尺寸越小,搜索或連接越快,因爲它會影響數據頁面上的實際數據行。 – Nirlep 2009-09-20 18:06:51

回答

4

你並不需要顯式地指定要在數據庫中使用索引。數據庫優化器將看看它知道可用的索引和算法回答您的查詢,(希望)選擇手頭任務的最佳方案。

所以你只需要像以前一樣從你的表中進行選擇;數據庫將自動「做正確的事情」。

因爲即使是最有經驗的開發人員,優化器也有點不透明,所以在開發查詢以查看爲其生成的「執行計劃」時非常重要。您可以使用數據庫的EXPLAIN命令的風格來查看計劃。

有藝術來設置正確的索引。下面是一個最近的例子,它通過了什麼算法和索引組合對於MySQL數據庫中的某些種類的選擇是最好的:http://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge/這可能有點太高級了,現在對你沒有用處,但通讀它以獲得一種感覺優化器試圖找出的東西的種類。

0

我認爲這可能取決於你使用的是哪一種dstabase,但是對於我對於SQL Server(2000,2005,2008)的體驗來說,並不需要擔心索引名稱。您只需在您經常用作查詢過濾器的列(WHERE子句或連接)上創建它,然後正常執行查詢。數據庫服務器會在它認爲可以提供幫助時小心使用該索引。

希望這有助於

1

我不認爲你瞭解索引是如何工作的。您在索引列上執行選擇的方式與您在索引列上執行選擇的方式相同。

0

數據庫將使用這些指示符而不告訴它。這是查詢優化器將執行的操作。

查看查詢計劃 - 例如對 選擇Sybase和SQL服務器OS 集SHOWPLAN .....

如果使用索引

在你做奇怪的場合這將顯示需要強制指標,但這種情況很少見

2

SQL Server將嘗試dertermine該指數將是最適合你寫的查詢。這將通過統計他對各種指數的幫助完成。 (你可以爲每個表一個以上的指數,但你應該限制在創建索引的數量)

你也可以創造的東西那卡列斯覆蓋索引。這是一個索引,它將包含查詢的所有字段。這允許SQL Server只查詢索引,而不是索引的表。

您還可以選擇在查詢中創建索引提示以強制sql server選擇一個索引而不是另一個索引,但不應該使用該選項,而是應使索引上的統計數據保持最新。

希望幫助

2

如果您使用MySQL,您可以指定要使用或不使用的索引。

SELECT * FROM table1 USE INDEX (col1_index,col2_index) 
    WHERE col1=1 AND col2=2 AND col3=3; 

SELECT * FROM table1 IGNORE INDEX (col3_index) 
    WHERE col1=1 AND col2=2 AND col3=3; 

你可以在這裏找到更多的信息:http://dev.mysql.com/doc/refman/5.1/en/index-hints.html

沃倫·布賴恩·迪諾羅尼亞