我有2個數據庫,我需要鏈接兩個大表(每個超過3M條目,不斷增長)之間的信息。 第一個數據庫有一個表「頁面」,用於存儲有關網頁的各種信息,幷包含每個網頁的URL。列'URL'是一個varchar(512)並且沒有索引。Mysql InnoDB性能優化和索引
的第二數據庫具有定義爲表 'urlHops':
CREATE TABLE urlHops
( dest
VARCHAR(512)NOT NULL, src
VARCHAR(512)DEFAULT NULL, timestamp
時間戳NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY dest_key
(dest
) KEY src_key
(src
) )ENGINE = InnoDB的默認字符集= LATIN1
現在,我基本上需要發出(高效)這樣的查詢: 從db1.pages中選擇p.id,p.URL,db2.urlHops u其中u.src = p.URL和u.dest =?
起初,我想在頁面(URL)上添加一個索引。但是這是一個非常長的列,我已經在同一張表上發佈了很多INSERT和UPDATE(比使用這個索引的選擇的數量要多)。
我認爲的其他可能的解決方案是: - 爲頁面添加一列,存儲URL的md5散列並將其編入索引;通過這種方式,我可以使用URL的md5進行查詢,並且可以在較小的列上使用索引。 - 添加另一個只包含頁面標識和頁面URL的表格,爲兩列編制索引。但是,這可能是浪費空間,只有不減慢我在'頁面'上執行的插入和更新的優勢。
我不想放慢插入和更新,但同時我可以有效地對URL進行查詢。有什麼建議?我最關心的是表現;如果需要,浪費一些磁盤空間不是問題。
謝謝你,至於
達維德
@Gary:我之前試過這樣做,但是urlHops是我以極高的速度插入數據的表,所以我不能將它分成兩部分(我基本上需要追加到它的src和dest夫婦URL)。如果我像這樣分割它,那麼它上面的插入就會減慢我的需要。 – 2010-06-09 21:32:09