Mysql

MySql 中 VARCHAR 欄位的可能索引

  • August 10, 2017

我在一個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)**我應該使用FULLTEXTor 和INDEXVARCHAR(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 個單詞

這是我過去兩年關於全文索引的其他文章

建議#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');

試一試 !!!

引用自:https://dba.stackexchange.com/questions/35821