也许这可能是菜鸟,但我正在搞几张桌子.
我有表A约45,000条记录
我有表B大约150万条记录
我有一个问题:
update
schema1.tablea a
inner join (
SELECT DISTINCT
ID, Lookup,
IDpart1, IDpart2
FROM
schema1.tableb
WHERE
IDpart1 is not NULL
AND
Lookup is not NULL
ORDER BY
ID,Lookup
) b Using(ID,Lookup)
set
a.Elg_IDpart1 = b.IDpart1,
a.Elg_IDpart2 = b.IDpart2
where
a.ID is NOT NULL
AND
a.Elg_IDpart1 is NULL
Run Code Online (Sandbox Code Playgroud)
所以我在ID,Lookup上强制索引.每个表都有这些列的索引,但由于子查询我强制它.
它正在运行,它真的应该采取,我想在5分钟之内......
我的问题是关于索引,而不是查询.
我知道你不能在有序索引中使用哈希索引.
我目前在ID,Lookup上都有索引,并且作为一个索引,它是一个B-Tree索引.基于我的WHEREClause,哈希索引是否适合作为优化技术?
我可以有一个哈希索引,其余的索引是B树索引吗?
这不是主要关键字段.
我会发布我的解释,但我更改了这些表上的名称.基本上它只是为ID使用索引...而不是使用ID,Lookup,我想强制它使用它们,或者至少把它变成另一种索引,看看是否有帮助?
现在我知道MySQL足够聪明,可以确定哪个索引最合适,那么它正在做什么?Lookup字段映射ID的第一部分和第二部分......
对此有任何帮助或见解表示赞赏.
一个EXPLAIN在UPDATE我拿出子查询后.
+----+-------------+-------+------+-----------------------------+--------------+---------+-------------------+-------+-------------+ | id | select_type | table | type | possible_keys | …