是否可以索引 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 排序?的主要内容,如果未能解决你的问题,请参考以下文章