MySQL优化,"喜欢"vs"="

Nin*_*Cat 5 mysql

我有一个像这样的列的表:

| Country.Number | CountryName |
| US.01          | USA     |
| US.02          | USA     |
Run Code Online (Sandbox Code Playgroud)

我想将其修改为:

| Country | Number | CountryName |
| US      | 01     | USA     |
| US      | 02     | USA     |
Run Code Online (Sandbox Code Playgroud)

关于优化,如果我使用,性能是否有差异:

select * from mytable where country.number like "US.%"
Run Code Online (Sandbox Code Playgroud)

要么

select * from mytable where country = "US"
Run Code Online (Sandbox Code Playgroud)

Sar*_*raz 7

后来的查询:

select * from mytable where country = "US"
Run Code Online (Sandbox Code Playgroud)

应该快得多,因为mySQL不必查找与LIKE查询不同的通配符模式.它只是寻找已经均衡的价值.

  • 使用`SELECT sql_no_cache ...`.无论如何,`17.49s vs. 19.18s`确实微不足道. (2认同)

rav*_*ren 7

在这种特殊情况下,性能差异很可能是微不足道的,因为mysql使用索引"US.%".在搜索类似"%.US"(通配符在前面)之类的东西时,通常会感觉到性能下降.因为它然后在不使用索引的情况下进行表扫描.

编辑:你可以这样看:

MySql在内部存储varchar索引,如树,第一个符号是根,并分支到每个下一个字母.

因此,当搜索= "US"它寻找时U,然后向下一步S,然后另一步以确保它是值的结束.这是三个步骤.

然后再搜索LIKE "US.%"它然后然后停止搜索并显示结果 - 这也只是三个步骤,因为它不关心值是否在那里终止.US.

编辑2:我不会推广这样的数据库非规范化,我只是想引起你的注意,这个问题可能不像乍看之下那么简单.