字符串第一部分的 MySQL 索引

Don*_*Don 2 mysql indexing

我在 MySQL 中查询一个非常大的表(超过 300 万条记录),它有一个 category_id、subcategory_id 和邮政编码。zip 在数据库中可能是也可能不是 10 个字符。

目的是获取指定 zip 特定半径内的所有 cat/subcat 项目。我有一个函数,它返回一个指定的 5 位 zip 列表。然后将此列表输入到我的查询中,就像这样......

SELECT whatever
FROM tblName
WHERE cat_id = 1
AND subcat_id = 5
AND LEFT(zip,5) IN (11111,22222,33333,44444,55555)
Run Code Online (Sandbox Code Playgroud)

我在 cat_id、subcat_id 和 zip 上有一个复合索引,但在某些情况下 10 个字符的 zip 可能会被丢弃。我可以以某种方式索引 LEFT(zip,5) 吗?

iat*_*nut 7

直接回答您的问题:是的,您可以索引 left(zip, 5)。

alter table tblName add index (zip(5));
Run Code Online (Sandbox Code Playgroud)

如果您希望查询能够使用索引来搜索所有列:

alter table tblName add index (cat_id, subcat_id, zip(5));
Run Code Online (Sandbox Code Playgroud)