mysql中有函数索引吗_有没有可能在MySQL中有基于函数的索引?

匿名用户

MySQL从8.0.13开始支持此功能

https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts

MySQL8.0.13和更高版本支持索引表达式值而不是列或列前缀值的功能关键部分。 使用功能性关键部件可以对不直接存储在表中的值进行索引。 示例:CREATE TABLE t1 (col1 INT, col2 INT, INDEX func_index ((ABS(col1))));

CREATE INDEX idx1 ON t1 ((col1 + col2));

CREATE INDEX idx2 ON t1 ((col1 + col2), (col1 - col2), col1);

ALTER TABLE t1 ADD INDEX ((col1 * 40) DESC);

一个具有多个关键部分的索引可以混合非功能性和功能性关键部分。

对于8.0.13之前的版本,有以下备选方案:

1.自MySQL 5.7.6以来

您可以使用自动生成的列来保存子字符串,其中包含索引:CREATE TABLE SomeTable (

id CHAR(10),

sub_id CHAR(8) AS SUBSTRING(id, 1, 8) STORED, INDEX(sub_id)

)

正如Benjamin所指出的,InnoDB支持虚拟列的辅助索引,因此可以省略STORED关键字。 实际上,虚拟列上的辅助索引可能更可取。 此处提供更多信息:辅助索引和生成的列

2.MySQL 5.7.6之前的版本

可以使用触发器更新的列,列上有索引:CREATE TABLE SomeTable (

id CHAR(10),

sub_id CHAR(8) , INDEX(sub_id)

);

CREATE TRIGGER TR_SomeTable_INSERT_sub_id

BEFORE INSERT

ON SomeTable FOR EACH ROW

SET NEW.sub_id = SUBSTRING(NEW.id, 1, 8);

CREATE TRIGGER TR_SomeTable_UPDATE_sub_id

BEFORE UPDATE

ON SomeTable FOR EACH ROW

SET NEW.sub_id = SUBSTRING(NEW.id, 1, 8);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值