我有兩個表,一個performer
表和一個redirect
表。 performer
表有一個名爲slug
的列。 redirect
表具有一個名爲source
的列。MySQL - 高效的正則表達式(或類似)查詢
source
和slug
列都有唯一的鍵索引。
一個slug
列數據的一個例子是這樣的:
this-is-a-slug
一個source
列數據的一個例子是這樣的:
this-is-a-slug.s12345
我想要一個高效的查詢,讓我所有的redirect
中的行有source
列,該列以slug
和「.s」字符開頭,後面跟着一個數字。
我嘗試這樣做:
select source from redirect
join performer on
source regexp concat('^', slug, '.s[0-9]+$');
這是極其緩慢。所以我決定以減少限制,並試圖此:
select source from redirect
join performer on
source like concat(slug, ".s%");
它仍然緩慢。
有沒有一種方法可以有效地做到這一點?
不,這是永遠不會是有效的,直到你改變你的模式(見下面的Rick的答案)。成千上萬行是10 *小*表。 – symcbean