是否可以索引 mysql 表以按 A 减去 B 排序?

Posted

技术标签:

【中文标题】是否可以索引 mysql 表以按 A 减去 B 排序?【英文标题】:Is it possible to index a mysql table for ordering by A minus B? 【发布时间】:2014-04-12 09:55:16 【问题描述】:

我有一个大的 mysql 表,有两列 A 和 B。我想从中选择 A 减去 B 的顺序。

我尝试过分别索引 A 和 B 以及同时索引 A 和 B。然而,无论如何查询都需要几秒钟。

我还没有找到任何关于创建像 (A-B) 这样的索引的信息,但我认为这个问题不会那么罕见。有解决办法吗?

我想出的唯一解决方法是添加一个额外的 A-B 列并为其编制索引,但这并不是一个好的解决方案。

【问题讨论】:

与索引无关,但使用派生表有时可以在按计算列排序时加快处理速度; SELECT * FROM (SELECT a,b,a-b AS c FROM myTable WHERE ...) ORDER BY c 我真的不明白在哪种情况下这可以加快速度。无论如何,我只是尝试过,但在这种情况下它没有帮助。 您是否考虑过在自己的列中预先计算 A-B?如果你读的比写的多,那应该是值得的。 (您也可以考虑使用触发器为您预先计算值,即使触发器本身通常会减慢速度)。 是的,预计算就是我所说的解决方法。你能提供你所说的触发器的链接吗? @Max 派生表的方式会限制订购时需要进行计算的次数。 Here 是一个相关的答案。一样的东西。在您的情况下,表达式非常简单,可能没有任何区别,但缺少索引是更大的问题。 【参考方案1】:

您的要求在标准 MySQL 中是不可能的。

您正在寻找一个数据库对象,Oracle 将其称为 function-based index,MariaDB 将其称为 persistent virtual column.

【讨论】:

以上是关于是否可以索引 mysql 表以按 A 减去 B 排序?的主要内容,如果未能解决你的问题,请参考以下文章

以最快的方式重新排序字母以按字典顺序排在第一位

mysql 多列索引的生效规则

mysql 多列索引的生效规则

影响mysql索引生效的场景

影响mysql索引生效的场景

MySQL联合索引生效的条件、索引失效的条件