如何在Knex.js和MySQL中使用索引

问题描述

我使用Knex.js为列创建了索引,但是找不到任何使用它的方法

knex('my_table')
.select('*')
.where('my_table.status','2')

索引名称为: my_table_stats_idx

我可以使用kex.raw()做到这一点,

FROM my_table USE INDEX(my_table_stats_idx)

但是我不得不使用一个复杂的查询建筑物,该建筑物不适用于 raw()

有没有办法用Knex做到这一点?

解决方法

在SQL中,您不会告诉数据库应使用哪个索引。您要做的只是描述所需的结果:数据库决定如何处理您的语句。为此,查询计划器考虑各种信息,当然包括可用的索引。如果它估计使用索引的计划是最佳的,则使用索引-否则就不使用。

您不会告诉您索引的定义是什么。对于您的查询,最佳索引可能是my_table(status)上的单列索引。

最后:在大多数数据库中,都有一些通过提示建议数据库使用给定索引的方法。这些在查询计划程序无法自行解决问题的极端情况下很有用。您的查询显然不够复杂,无法满足这种情况。

,

在from子句中需要knex.raw

   knex
  .select('*')
   .where('my_table.status','2')
  .from(knex.raw('my_table  FORCE INDEX(my_table_stats_idx)'))