当前位置: 首页 > 面试题库 >

MySQL中是否可以有基于函数的索引?

全誉
2023-03-14
问题内容

我记得在Oracle中可以基于函数进行索引,例如SUBSTRING(id,1,8)

MySQL支持吗?如果没有,还有其他选择吗?


问题答案:

不,不是一般意义上的,我什至不认为5.6(首次编写此答案时的最新版本)具有此功能。值得注意的是,8.0.13及更高版本现在支持功能索引,使您无需下面所述的触发方法即可实现所需的功能。

有关更多详细信息,请参见https://dev.mysql.com/doc/refman/8.0/en/create-
index.html

如果你正在运行的是旧版本mysql,它 可以只使用 领先
列的部分(这个功能已经存在了很长一段时间),但在第二次或以后的字符,或任何其它更复杂的功能,而不是一个开始。

例如,以下使用名称的前五个字符创建索引:

create index name_first_five on cust_table (name(5));

对于更复杂的表达式,可以通过在其中包含可索引数据的 另一 列,然后使用插入/更新触发器来确保正确填充来达到类似的效果。

除了浪费冗余数据的空间外,这几乎是同一回事。

而且,尽管从技术上讲它违反了3NF,但可以通过使用触发器来保持数据同步来缓解这种情况(通常这样做是为了提高性能)。



 类似资料:
  • 问题内容: 我从2005年起在MySQL论坛上找到了一个帖子,但是最近才发布。基于此,这是不可能的。但是在3-4年内会有很多变化。 我正在寻找的是一种在视图上建立索引但使被查看的表保持未建立索引的方法。索引会损害写入过程,并且该表的写入频率非常高(索引会减慢所有内容的爬取速度)。但是,缺少索引使我的查询非常缓慢。 问题答案: 我不认为MySQL支持您需要的物化视图,但无论如何在这种情况下它不会帮助

  • 问题内容: 你能 声明这样 的函数吗? 然后像这样 重新声明 它… 这样可以覆盖函数吗? 可以吗 问题答案: 编辑 解决此答案未直接解决原始问题的评论。如果您是通过Google搜索到达的,请从此处开始 有一个名为override_function的函数可以实际使用。但是,由于此函数是Advanced PHP Debugger扩展的一部分,因此很难为生产使用提供参数。因此,我要说“否”,不可能以原始

  • 问题内容: 如果行达到一定数量,我想压缩结果。 然后,客户端程序将解压缩结果和过程。 这是具有客户端/服务器体系结构的桌面,某些客户端通过vpn连接。 客户端连接后,它将向服务器发送数据。服务器完成处理后,客户端将从服务器下载更新的数据。 客户位于几个城镇,平均50-100公里。离开。他们将使用vpn通过Internet连接。但这是使用vpn或其他方式实施的最初计划,但尚未实施。 问题答案: 有一

  • 问题内容: 我想定期执行一个程序,如何在MySQL中做到这一点? 问题答案: 如果您拥有MySQL 5.1,则可以使用事件。 http://dev.mysql.com/doc/refman/5.1/zh- CN/events.html

  • 问题内容: 我想使用Streams.intRange(int start,int end,int step)实现反向排序的流。但是,似乎java.util.Streams类不再可用(但是它仍在标准库的rt.jar中)。此方法是在其他类中还是被其他方法替代? 问题答案: 实际上,JDK中再也没有这种方法了。您能获得的下一个最接近的位置是,但是只会一步一步走。 一种解决方案是实施您自己的解决方案。例如

  • 我正在做一个关于kafka流和KTable的poc。我想知道是否有任何方法在kafka中存储数据(键-值对或键-对象对),或者通过流、KTable、状态存储,这样我就可以检索基于键和值的数据库。我创建了一个基于topic的kstream,在该kstream上推送了一些消息,并使用wordcountalgo在kstream上创建的ktable中填充了值。类似这样的事情: 我无法获取基于值的记录。 h