函数索引示例:

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);

涉及多个字段的索引,可以混合使用函数索引和非函数索引,如下:

alter table sbtest1 add index idx_name_age(name, (age+1));

函数索引定义时,可以使用 DESC, ASC 指定其排序方式,如下:

alter table sbtest1 add index idx_1(name desc, (age*10) asc );

函数索引的限制条件:

函数索引实际上是作为一个隐藏的虚拟列实现的,因此其很多限制与虚拟列相同,如下:

函数索引的字段数量受到表的字段总数限制

函数索引能够使用的函数与虚拟列上能够使用的函数相同

子查询,参数,变量,存储过程,用户定义的函数不允许在函数索引上使用

虚拟列本身不需要存储,函数索引和其他索引一样需要占用存储空间

函数索引可以使用 UNIQUE  标识,但是主键不能使用函数索引,主键要求被存储,但是函数索引由于其使用的虚拟列不能被存储,因此主键不能使用函数索引

如果表中没有主键,那么 InnoDB 将会使其非空的唯一索引作为主键,因此该唯一索引不能定义为函数索引

函数索引不允许在外键中使用

空间索引和全文索引不能定义为函数索引

对于非函数的索引,如果创建相同的索引,将会有一个告警信息,而函数索引则不会

如果一个字段被用于函数索引,那么删除该字段前,需要先删除该函数索引,否则删除该字段会报错

非函数索引支持对字段前缀进行索引,函数索引不支持前缀。可以使用 SUBSTRING() 或者 CAST() 。但是查询 SQL 中的参数必须与函数索引定义时的参数完全相同才能使用该索引,如下示例:

CREATE TABLE tbl (

col1 LONGTEXT,

INDEX idx1 ((SUBSTRING(col1, 1, 10)))

);

SELECT * FROM tbl WHERE SUBSTRING(col1, 1, 9) = '123456789';

SELECT * FROM tbl WHERE SUBSTRING(col1, 1, 10) = '1234567890';

SUBSTRING(col1, 1, 9) 无法使用函数索引,SUBSTRING(col1, 1, 10) 可以使用函数索引。

mysql函数索引_MySQL 函数索引 (Functional indexes)相关推荐

  1. mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总

    前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...

  2. mysql function加速_MySQL - 函数(FUNCTION)

    about MySQL提供了丰富的内置函数自定义函数. 而我们也对这些函数有所了解,比如聚合函数. 本篇再来了解一些内置函数和自定义函数的编写. 写在前面的话:默认情况下,函数名称和其后的括号之间必须 ...

  3. mysql 建立索引_mysql建立索引的原则

    1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录.例如,学生表中学号是具有唯一性的字段.为该字段建立唯一性索引可以很快的确定某个学生的信息.如果使用姓名的话,可能存在同 ...

  4. 添加mysql 函数库_mysql函数创建

    如何使用MySQL提升权限 前不久网上公开了一个MySQL Func的漏洞,讲的是使用MySQL创建一个自定义的函数,然后通过这个函数来攻击服务器.最早看到相关的报道是在o-otik上,但是公布的是针 ...

  5. mysql trim 索引_mysql建索引后需要重启数据库修改MySQL的字符集

    windows下的mysql配置文件是my.ini,一般在c:\windows\my.ini或者c:\winnt\my.ini可以直接在这个文件里面加上 W WW.002pc .COM从mysql建索 ...

  6. mysql 创建唯一索引_Mysql创建索引

    零:文章概要 这篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引. 一:先拿电话薄做个类比 假如,一个电话薄里面包含了一个城市的所有人的姓名和电 ...

  7. mysql函数示例_mysql函数备忘单和示例

    mysql函数示例 There are a ton of functions provided by MySQL and most of them are used extensively. I wi ...

  8. mysql 创建全文索引_mysql创建索引

    1.创建普通索引 创建一个普通索引时,不需要加任何UNIQUE.FULLTEXT或者SPATIAL参数. 下面创建一个表名为index1的表,在表中的id字段上建立索引.SQL代码如下: CREATE ...

  9. mysql 普通索引和唯一索引_MySQL 普通索引和唯一索引的区别

    该文为< MySQL 实战 45 讲>的学习笔记,感谢查看,如有错误,欢迎指正 一.查询和更新上的区别 这两类索引在查询能力上是没差别的,主要考虑的是对更新性能的影响.建议尽量选择普通索引 ...

最新文章

  1. Asp.Net web.config配置节点大全详解
  2. 【译】Object Dumper: 函数式程序设计编码中的强大工具
  3. 操作系统【信号量集机制、“读者-写者”问题】
  4. Bootstrap富文本编辑器-bootstrap-wysiwyg
  5. 关于JavaScript的编译原理
  6. 关于iconfont的一些东西
  7. DIGITS使用步骤
  8. 杰奇2.4UTF安装教程+关关远程采集
  9. app测试和接口测试区别
  10. 〖Python 数据库开发实战 - MySQL篇㉕〗- 数据更新操作 - UPDATE 语句
  11. shape from shading
  12. editplus配置python_Editplus配置Python的开发环境
  13. MSTAR 数据转格式
  14. 编写程序求解百鸡百钱问题。公鸡5元一只,母鸡3元一只,小鸡一元3只,问100元钱买100只鸡,可买公鸡、母鸡、小鸡各多少只?
  15. 分布式高频量化交易系统架构讲解(企业版,期货ctp,股票xtp,数字货币,附全部源码)(值得收藏)
  16. R或RStudio下载包时出错解决方案
  17. 12.寻光集后台管理系统-库存信息(后端)
  18. java代码借助插件生成组织架构图并实现导出功能
  19. /etc/profile和 . profile 文件
  20. JS新建文件到本地(不弹出保存文件框)

热门文章

  1. 【Python项目】Python实现一个亲戚关系计算器,过年回家再也不要怕叫错人了 | 附带源码
  2. 转:人只能领导他喜欢的人
  3. 计算机设备损坏赔偿制度,南昌工学院实验设备损坏丢失赔偿办法
  4. iOS代码混淆--最终版
  5. c语言ole错误,OLE错误C0000094
  6. 模电三:光耦、发声器件、继电器、数码管、瞬态抑制器
  7. 单变量与多变量线性回归(Linear Regression with One Variable)
  8. 全新电影影院管理JAVA系统源码+电影购票系统
  9. PTA乙级 1110 区块反转——25分
  10. AIGC大模型时代下,该如何应用高性能计算PC集群打造游戏开发新模式?