我繼承了用MySQL和PHP構建的自定義CMS的代碼庫,它使用全文索引在內容(文本)字段中進行搜索。在分析數據庫結構,我發現所有相關表格以下列方式(簡化的例子)創建:對於文本列有兩個全文索引真的有必要嗎?
CREATE TABLE `stories` (
`story_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`headline` varchar(255) NOT NULL DEFAULT '',
`subhead` varchar(255) DEFAULT NULL,
`content` text NOT NULL,
PRIMARY KEY (`story_id`),
FULLTEXT KEY `fulltext_search` (`headline`,`subhead`,`content`),
FULLTEXT KEY `headline` (`headline`),
FULLTEXT KEY `subhead` (`subhead`),
FULLTEXT KEY `content` (`content`)
) ENGINE=MyISAM;
正如你所看到的,在通常的方式是建立全文索引,但隨後每列分別添加我相信這也創造了兩個不同的指標。
我已經聯繫了以前的開發人員,他說這是創建全文索引的「正確」方式,但根據我在互聯網上找到的每一個示例,都沒有這樣的要求,這將是不夠的:
CREATE TABLE `stories` (
`story_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`headline` varchar(255) NOT NULL DEFAULT '',
`subhead` varchar(255) DEFAULT NULL,
`content` text NOT NULL,
PRIMARY KEY (`story_id`),
FULLTEXT KEY `fulltext_search` (`headline`,`subhead`,`content`)
) ENGINE=MyISAM;
表有超過80,000行,並正變得越來越難以管理(完整的數據庫是接近10GB),所以我想擺脫任何不必要的數據。
非常感謝提前。
你如何查詢這個或這些與答案直接相關的索引。例如,您是否有僅僅搜索內容的查詢? – Steve 2013-03-08 15:59:26
實際上,搜索工具允許用戶定義將用於執行搜索的字段,但根據我用MATCH()語句處理的知識(以及CMS中的相關PHP代碼),例如:SELECT *從故事匹配(內容).. – Proteo 2013-03-08 16:07:58