php - 索引对 where 子句中没有索引列的查询有帮助吗?

标签 php mysql sql

我想删除一个表中的索引,该索引在 php 中的访问从不使用索引列。索引占用了额外的空间,我正在尝试修剪它。这是一张电话号码表。电话号码链接到用户个人资料的 ID。所以它有 3 列。 id(索引)、numberperson。我想知道删除索引是否会影响在 where 子句中使用 numberperson 的查询。我的直觉是不应该,但恐怕计算机科学对直觉不起作用。通过 join 访问数据。例如……

SELECT *
FROM people ... LEFT JOIN
     phoneNumbers
     ON people.id = phoneNumbers.person

编辑:显然没有人能够回答标题中的问题。

最佳答案

在您显示的情况下,只有 person 列会从索引中受益。

索引主要在四种情况下提供帮助:

  • 行限制,即按值查找行,而不是检查表中的每一行。

    • Joining 是行限制的一个子集,即第一个表中的每个不同值在第二个表中查找匹配的行。为 ON 子句中引用的列编制索引的方式与为 WHERE 子句中引用的列编制索引的方式相同。
  • 排序,按索引顺序检索行,而不必将结果集排序作为附加步骤。

  • Distinct 和 Group By,扫描索引中的每个不同值。

  • 覆盖索引,即查询只需要在索引中找到的列。

在 InnoDB 的情况下,每个表都被视为基于其主键的索引组织表,我们应该利用这一点,因为主键查找非常有效。因此,如果您可以在 phoneNumbers.person 列(部分)上重新定义一个主键,那将是最好的。

关于php - 索引对 where 子句中没有索引列的查询有帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439001/

相关文章:

php - 基本正则表达式 PHP 问题

javascript - 如何在ajax中放置条件警报框

php - REST API 授权和身份验证(网络 + 移动)

php - 复选框值带有单个值

php - Laravel 5.4 中的 3 种模型多对多同步

sql - 如何区分 DB2 中的两个时间戳?

sql - 在创建 tsquery 之前我应该​​从字符串中删除冒号吗?

php - 当鼠标悬停在同一个 echo 命令中的元素上时,在 php 的 echo 命令中显示一个元素

mysql - 如何在 MySQL 中自动将一个表的值加载到另一个表中?

sql - 棘手的事件记录关系——多态双向自引用