2012-07-19 109 views
2

我有一個由圖形組成的數據庫。我需要訪問表看起來像這樣:高效查詢圖結構

Sno Source Dest 
1  'jack' 'bob' 
2  'jack' 'Jill' 
3  'bob' 'Jim' 

這裏Sno是主鍵。源和目標是2個非唯一的數字,代表我的圖中節點之間的邊。我的SourceDest也可能是字符串,不一定是數字數據類型。我的數據庫中有大約500萬條記錄,我使用Postgresql和Psycopg2構建了它。

查詢主鍵非常簡單快捷。但是,我需要經常查詢這個數據庫中的所有dest特定源連接到。現在,我通過調用查詢做到這一點:

SELECT * FROM name_table WHERE Source = 'jack' 

這被證明是非常低效的(高達每查詢2秒),也沒有辦法,我可以做這個主鍵,因爲它不是唯一。有什麼方法可以根據這些重複值進行索引並快速查詢它?

+1

你已經在'Source'字段設置了一個索引?正如這裏解釋的http://www.postgresql.org/docs/9.1/static/sql-createindex.html – fdomig 2012-07-19 20:00:16

+0

要設置一個索引,你需要把它作爲主鍵的權利?它不需要唯一的密鑰嗎?如果不是我如何設置這個索引? – Amitash 2012-07-19 20:01:39

+2

您應該閱讀我發佈的文檔。這告訴你*使用PostgreSQL進行索引時的一切*。 – fdomig 2012-07-19 20:03:27

回答

4

這應該會讓你的查詢快得多。

CREATE INDEX table_name_index_source ON table_name Source;

不過也有,你可以用

PostgreSQL文檔

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ] 
    ({ column | (expression) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...]) 
    [ WITH (storage_parameter = value [, ... ]) ] 
    [ TABLESPACE tablespace ] 
    [ WHERE predicate ] 

瞭解更多關於PostgreSQL的索引在他們Documentation很多選擇。

更新

如果你的表是是你的,這將爲肯定的幫助。但是,如果數據集越來越多,則應該考慮將模式更改爲具有可以更高效地編入索引的唯一值。

+0

哇謝謝..這很快! – Amitash 2012-07-19 20:13:58