问题描述
我使用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)'))