我有一个countries
这样的表,在 iso2 列上有一个索引:
进行普通选择查询时,iso2 索引工作正常:
但是当与 iso2 上的另一个表连接时,它的行为非常奇怪:
首先它说NULL
possible_keys 但它仍然使用它?然后它还说 256 行这是整个表。它在大更新时运行非常慢,所以我可以看出它没有使用索引。这里有什么问题?
编辑:另外,如果我从 iso2 索引中取出id
列(参见第一张图片),那么它会说在连接上没有使用索引。
更多信息:我一直在尝试规范化我的数据并使用 acountry_id
而不是country
. country_id
当我注意到它变得非常缓慢时,我正在更新表格。一些解释让我发现索引没有被使用。也许它与 iso2 是 char(2) 有关?
我正在像这样填充 country_id:
UPDATE leads
LEFT JOIN countries on leads.country=countries.iso2
SET leads.country_id=countries.id
leads
对于表上的大约 100k 行,此查询花费了将近 40 秒。