我在两个表(
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 标识符,例如 COLUMN 的名称...
要为大表使用和索引,您必须拥有该表使用的所有列,而不仅仅是所查找的列...
您有以下指标吗:
X001 ON pos_transactions (user_id, card_number)
X002 ON users (belongs_to, id)
?