我想删除一个表中的索引,该索引在 php 中的访问从不使用索引列。索引占用了额外的空间,我正在尝试修剪它。这是一张电话号码表。电话号码链接到用户个人资料的 ID。所以它有 3 列。 id
(索引)、number
和 person
。我想知道删除索引是否会影响在 where 子句中使用 number
或 person
的查询。我的直觉是不应该,但恐怕计算机科学对直觉不起作用。通过 join
访问数据。例如……
SELECT *
FROM people ... LEFT JOIN
phoneNumbers
ON people.id = phoneNumbers.person
编辑:显然没有人能够回答标题中的问题。
最佳答案
在您显示的情况下,只有 person
列会从索引中受益。
索引主要在四种情况下提供帮助:
行限制,即按值查找行,而不是检查表中的每一行。
- Joining 是行限制的一个子集,即第一个表中的每个不同值在第二个表中查找匹配的行。为
ON
子句中引用的列编制索引的方式与为WHERE
子句中引用的列编制索引的方式相同。
- Joining 是行限制的一个子集,即第一个表中的每个不同值在第二个表中查找匹配的行。为
排序,按索引顺序检索行,而不必将结果集排序作为附加步骤。
Distinct 和 Group By,扫描索引中的每个不同值。
覆盖索引,即查询只需要在索引中找到的列。
在 InnoDB 的情况下,每个表都被视为基于其主键的索引组织表,我们应该利用这一点,因为主键查找非常有效。因此,如果您可以在 phoneNumbers.person
列(部分)上重新定义一个主键,那将是最好的。
关于php - 索引对 where 子句中没有索引列的查询有帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439001/