MySql 【8.0+】 支持给函数加索引,提高查询效率

创建索引

CREATE INDEX idx_birth_year ON employees ((YEAR(birthdate)));

结论:查询时,使用函数后,该字段索引会失效。但是 8.0+ 支持给函数增加索引,从而提高查询效率

### MySQL 8.0 中 Normal 索引的类型及其定义和使用场景 #### 正常索引(Normal Index) 正常索引是最基本的索引形式,它不具有任何特殊属性或约束。以下是其具体描述: - **定义**: 正常索引是一个普通的 B-Tree 索引[^4],允许重复值的存在,并且不对列的数据进行唯一性约束。这种类型的索引主要用于提高查询性能。 - **特点**: - 基于 B-Tree 数据结构实现。 - 支持等值查询、范围查询以及排序操作。 - 可以应用于单列或多列组合的情况。 - **使用场景**: - 当需要速特定列上的频繁查询时,可以考虑创建正常索引。 - 如果某列经常作为过滤条件的一部分参与查询,则可以通过为其添正常索引来优化查询效率。 - 示例代码如下: ```sql -- 创建单列正常索引 CREATE INDEX idx_normal_single ON table_name (column_name); -- 创建多列组合正常索引 CREATE INDEX idx_normal_multi ON table_name (column1, column2); ``` --- #### 注意事项 尽管正常索引非常灵活,但在某些复杂条件下可能会失效。例如,当 `WHERE` 子句中存在逻辑运算符 `OR` 或者涉及未覆盖索引的部分时,可能导致索引无法被有效利用[^3]。 此外,在实际应用过程中,还需要注意环境变量的影响。比如对于 `IN` 查询语句而言,`eq_range_index_dive_limit` 参数会直接影响索引的选择策略。如果 `IN` 列表中的值超过此限制,默认情况下将不再尝试通过索引访问数据[^1]。 --- #### 函数索引补充说明 除了传统的正常索引外,MySQL 8.0 还引入了函数索引功能,这使得开发者能够在表达式或者计算结果上构建索引[^2]。这种方式特别适合那些原本难以直接索引的字段,例如日期部分提取后的月份值或其他复杂的转换逻辑。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值