如何强制使用索引?

问题描述 投票:0回答:1

我在两个表(

users
pos_transactions
)上有一个巨大的数据集,我需要对它们执行
join

我使用

join
subquery 方法编写了查询。两者看起来都不是最佳的:

explain SELECT pt.card_number
        FROM pos_transactions pt
        where user_id in (select id from users where belongs_to = "ezpay")

explain SELECT pt.card_number
        FROM pos_transactions pt
        join users u on u.id = pt.user_id
        where u.belongs_to = "ezpay"

看到了吗?在这两种情况下,都会扫描超过 2M 行。注意到我有这两个索引:

- `users(belongs_to)`
- `pos_transactions(user_id)`

另外,我已经尝试过对两个查询的两个索引进行

force index()
,但它仍然进行完整扫描。知道如何以最佳方式获得结果吗?

sql mysql performance query-optimization
1个回答
0
投票
  1. 您没有正确编写查询,因为字符串不能使用双引号,而只能使用单引号。双引号保留用于 SQL 标识符,例如 COLUMN 的名称...

  2. 要为大表使用和索引,您必须拥有该表使用的所有列,而不仅仅是所查找的列...

您有以下指标吗:

X001 ON pos_transactions (user_id, card_number)
X002 ON users (belongs_to, id)

© www.soinside.com 2019 - 2024. All rights reserved.