Mysql
按左(col,x)文本列分組-可以索引嗎?
我正在尋找以下可能的索引:
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
.