MYSQL索引计算where条件的正确方法(where myTable.a>;myTable.b)

MYSQL索引计算where条件的正确方法(where myTable.a>;myTable.b),mysql,indexing,laravel-5.3,Mysql,Indexing,Laravel 5.3,MySQL——版本是5.7.18 优化查询的正确方法是什么,如: select id,name from mytable where a - b > 0 我的桌子是什么样子的 id-主键,增量,大整数 name-varchar(255) a-整数,无符号,10 b-整数,无符号,10 将索引添加到a和b列会有帮助吗?我是否应该只添加第三列a_减b,对其进行索引,然后每次都要小心正确地更新它,还是有更好的方法?您可以使用生成的列,然后对其进行索引: alter table mytabl

MySQL——版本是5.7.18

优化查询的正确方法是什么,如:

select id,name from mytable where a - b > 0
我的桌子是什么样子的

  • id
    -主键,增量,大整数
  • name
    -varchar(255)
  • a
    -整数,无符号,10
  • b
    -整数,无符号,10

将索引添加到
a
b
列会有帮助吗?我是否应该只添加第三列
a_减b
,对其进行索引,然后每次都要小心正确地更新它,还是有更好的方法?

您可以使用生成的列,然后对其进行索引:

alter table mytable add column abdiff int generated always as (a - b);

create index idx_mytable_abdiff on mytable(abdiff);

注意:这对类型使用
int
。您可以为差异指定任何类型。

这听起来很棒,也很简单。生成的列是否会反映表中的旧数据?@dbr。生成的列在使用时进行计算。生成的列上的索引足够智能,可以在生成的表达式中的任何列发生更改时进行更新。谢谢,我在这里有点新手。我以为是这样,但想检查一下以防万一。当我更改数据库和测试时将接受。@dbr。这是MySQL中非常新的功能。