2010-02-11 106 views
3

在我的500萬條記錄..表的 結構數據庫:MySQL的優化

CREATE TABLE IF NOT EXISTS `music` (
    `id` int(50) NOT NULL auto_increment, 
    `artistname` varchar(50) NOT NULL, 
    `songname` varchar(50) NOT NULL, 
    `duration` varchar(6) NOT NULL, 
    `url` varchar(255) NOT NULL, 
    `server` int(5) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `artistname` (`artistname`), 
    KEY `songname` (`songname`), 
    KEY `url` (`url`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; 

我如何優化表,然後做在田地裏「ARTISTNAME」和「SONGNAME」的搜索?

對不起,英語不好。來自俄羅斯的愛情:-D

回答

6

創建FULLTEXT指數:

CREATE FULLTEXT INDEX fx_music_artist_song ON music (artistname, songname) 

,併發出這樣的詢問:

SELECT * 
FROM mytable 
WHERE MATCH(artistname, songname) AGAINST ('+queen +bohemian' IN BOOLEAN MODE) 

這將在兩個artistnamesongname匹配,即使單詞並不領先。

只匹配藝術家,你只能在artistname創建一個額外的指標,並用它在查詢:

SELECT * 
FROM mytable 
WHERE MATCH(artistname) AGAINST ('+queen' IN BOOLEAN MODE) 

MATCH子句中設置的列應該是完全一樣的索引定義爲相應的索引使用。

請注意,即使沒有索引,該子句也可以工作,但在這種情況下,它將會更慢。