Mysql
MySql 中 VARCHAR 欄位的可能索引
我在一個MySql 數據庫中工作,有一個像這樣的表:
+--------------+ | table_name | +--------------+ | myField | +--------------+
…我需要做很多這樣的查詢*(列表中有 5-10 個字元串)*:
SELECT myField FROM table_name WHERE myField IN ('something', 'other stuff', 'some other a bit longer'...)
將有大約 24.000.000 個唯一行
**1)**我應該使用
FULLTEXT
or 和INDEX
鍵VARCHAR(150)
嗎?**2)**如果我將字元從 150 增加到 220 或 250 ……會有很大的不同嗎?(有什麼方法可以計算嗎?)
3)正如我所說,它們將是唯一的,所以myField應該是PRIMARY KEY。將 PRIMARY KEY 添加到已經是 VARCHAR INDEX/FULLTEXT 的欄位中是不是很少見?
建議 #1:標準索引
CREATE TABLE mytable ( id int not null auto_increment, myfield varchar(255) not null, primary key (id), key (myfield) );
如果您像這樣索引,您可以查找整個字元串或進行左向 LIKE 搜尋
建議#2:全文索引
CREATE TABLE mytable ( id int not null auto_increment, myfield varchar(255) not null, primary key (id), fulltext (myfield) );
您可以有效地使用搜尋單個關鍵字以及整個片語。您將需要定義一個自定義停用詞列表,因為MySQL 不會索引 543 個單詞。
這是我過去兩年關於全文索引的其他文章
May 23, 2011
:優化 mysql 全文搜尋 (StackOverflow)Oct 25, 2011
:在 BOOLEAN MODE 中忽略 FULLTEXT 索引,條件為“字數”Jan 26, 2012
:Mysql全文搜尋my.cnf優化May 07, 2012
:MySQL EXPLAIN 不顯示 FULLTEXT 的“使用索引”建議#3:雜湊索引
CREATE TABLE mytable ( id int not null auto_increment, myfield varchar(255) not null, hashmyfield char(32) not null, primary key (id), key (hashmyfield) );
如果您正在尋找一個特定值並且這些值的長度可能遠遠超過 32 個字元,您可以儲存散列值:
INSERT INTO mytable (myfield,hashmyfield) VALUES ('whatever',MD5('whatever'));
這樣,您只需搜尋雜湊值即可檢索結果
SELECT * FROM mytable WHERE hashmyfield = MD5('whatever');
試一試 !!!