并非所有列都建立索引时的 MySQL 优化

标签 mysql sql optimization innodb

假设我有一个包含 3 列和数千条记录的表,如下所示:

id # primary key
name # indexed
gender # not indexed

我想找到“所有名为 Alex 的男性”,即特定的名字和特定的性别。

这种简单的方式(从 name='alex' 且性别=2 的人中选择 *)是否足够好?或者是否有更优化的方法,例如名称子查询?

最佳答案

假设您没有数千条与姓名相匹配的记录,其中只有少数是真正的男性,那么 name 上的索引就足够了。一般来说,您不应该对基数很小的字段建立索引(只有 2 个可能的值意味着您将匹配 50% 的行,这并不能证明使用索引是合理的)。

我能想到的唯一有用的异常(exception)是,如果您仅选择姓名和性别,并且将它们都放入索引中,则可以执行索引覆盖查询,该查询比通过索引选择行然后从表中检索数据更快。

关于并非所有列都建立索引时的 MySQL 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11682259/

相关文章:

mysql - 如何使用子句(where,and not,or not)sql

mysql 计数和连接

python - 如何在 scipy.optimize 中使用 fmin_cg 获得正确的尺寸

mysql - 使用 Golang 执行不同的 MySQL 查询

MySQL:使用 "ON"匹配不精确的值

php - 数组值在查询中不起作用

mysql - 连接表上的多个 WHERE 子句

jquery - MySQL查询获取存在/不存在的任意组合

c# - .Net优化

mysql - 如何在phpmyadmin中连接两个表?