Mysql

按左(col,x)文本列分組-可以索引嗎?

  • April 5, 2021

我正在尋找以下可能的索引:

select left(name,10), count(*)
from tab
group by left(name,10)

這是表配置:

create table tab(
id int(11),
name text,
primary key(id),
key name(name(10)))

優化器不使用索引進行選擇。知道在 MySQL 中是否可行?例如,在 Oracle 中,我可以在函式上創建索引,這在 MySQL 中是不支持的。

您可能想嘗試這樣的事情

create table x 
(
 y varchar (25),
 z varchar (10) generated always as (left(y, 19)) stored, -- also virtual
 key (z) 
);

或者您可以將索引命名如下(參見此處):

CREATE INDEX x_z_ix ON x (z);

我發現為索引提供明確的名稱是可取的——它會提供更有意義的錯誤消息。

僅僅因為有一個索引並不意味著優化器會真正使用它!該表可能太小、太多空值、值傾斜 &c。

我不確定您自己的創建表語法實際上在做什麼 - 您能否發布show create table tab\G.

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