簡體   English   中英

這是索引MySQL數據庫的TEXT列的正確方法嗎?

[英]Is it a correct way to index TEXT column of MySQL database?

我有一個從字符串到整數的映射。 要將此映射存儲在MySQL數據庫中,我創建了下表:

CREATE TABLE map(
  Argument TEXT NOT NULL,
  Image INTEGER NOT NULL
)

我為參數選擇了TEXT類型,因為它的長度是不可預測的,目前最長的記錄有2290個字符,平均長度是88個字符。

在我遇到性能問題之后,我試圖在Argument列上添加索引,但發現我必須指定長度,所以為了避免這種限制,我添加了一個新的整數列,其中包含參數列值的哈希值(md5或其他)。

ALTER TABLE map ADD COLUMN ArgumentHash INTEGER;

和綜合指數

CREATE INDEX argument_index USING HASH ON map(ArgumentHash, Argument(80));

從那時起,性能問題就消失了。 我想問一下解決這個問題是否正確。

我不認為有一種“正確”的方式,這取決於你使用的是什么。

根據我的經驗,不得不/想要選擇大型文本列; 文本通常是由其他一些鍵檢索的數據(除非以其他方式索引 - 例如全文,Lucene - 但這似乎不是你在做什么)

如果你確實需要在大字段上進行精確匹配,那么使用散列可能會更有效,因為它可能會讓你保持索引更小。 我的猜測是,如果您需要使用大於散列大小的索引大小(取決於TEXT開頭與值的差異程度通常不同),請使用散列。

你最好的選擇是試試看。 用代表性數據描述兩種方法並找出答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM