Mysql

這會導致成本嗎?從使用者中選擇名稱,其中 user_name LIKE ‘%alex%’

  • May 18, 2012

我想知道如果許多並髮使用者向 mySQL InnoDB 儲存引擎發送相同的請求,此語句是否會導致實際成本。假設我有一個包含 user_name 的表,並且有人想找到在其使用者名中包含 alex 一詞的人。如果我將 LIKE 與 InnoDB 引擎一起使用,你認為它會導致這麼多成本嗎?假設我索引了使用者名欄位。

Select name from User where user_name LIKE '%alex%';

也許吧,但也許這不值得擔心。根據我們談論的行數,您可能無法避免掃描。你的表有多少行?

使用者名列上的索引不會幫助這個查詢。完全沒有。想想電話簿:很容易找到所有姓氏以 開頭的人Sm,對吧?找到所有姓氏包含ith(或名字John,就此而言)的人並不容易。

如果您將允許的搜尋限制為“開始於”而不是“包含”,則索引*可能會有所幫助。*從長遠來看,這可能是一個更好的答案。

無論如何,誰在搜尋包含 alex的使用者名?這是一個常見的案例嗎?如果是這樣,您可能想研究替代機制。在 SQL Server 中,我們有全文搜尋;有關如何在 MySQL 中解決相同問題的一些想法,請參閱這個 StackOverflow 問題(但請記住,這可能是您不需要解決的“問題”)。

前幾天我也在想同樣的問題,我在網際網路上發現用like和text進行搜尋的最佳方法是’WORD%’,末尾有%(找不到以word結尾的文本)如果您不能使用您的查詢將逐行逐字逐句讀取每個結果的所有文本以查找匹配項。

我看到的其他選項(對我來說沒有太大意義)是分隔查詢,

select * from actor where first_name like 'alex%' or first_name like '%alex';

我認為有一個全文索引會很有幫助(讓我看看我是否可以找到資訊並編輯我的文章)

編輯:這裡是全文索引的資訊,

首先,引擎必須是 MyISAM

添加索引文本,

ALTER TABLE fulltext_sample ADD FULLTEXT(column_name)

標準 FULLTEXT 搜尋的主要功能列表如下:

Excludes partial words
Excludes words less than 4 characters in length (3 or less)
Excludes words that appear in more than half the rows (meaning at least 3 rows are required)
Hyphenated words are treated as two words
Rows are returned in order of relevance, descending
Words in the stopword list (common words) are also excluded from the search results. The stopword list is based upon common English words, so if your data is used for a different purpose, you'll probably want to change the list. Unfortunately, doing so at present is not easy. You'll need to edit the file myisam/ft_static.c. recompile MySQL, and rebuild the indexes! To save you hunting through the source, or if you have a binary version of MySQL, here is a list of stopwords. Note that these can and do change with different versions. To be absolutely sure, you'll have to check the specific list for your version.

有了這個,您可以使用 ‘%Axel%’ 通過全文改進搜尋

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