Php 在所选列上添加索引是否会加快查询速度?

Php 在所选列上添加索引是否会加快查询速度?,php,mysql,sql,performance,indexing,Php,Mysql,Sql,Performance,Indexing,我有一个相当常见的设置,我有一个标签表和记录对。查询它的速度很慢,因此向我正在查询的标记的列添加索引有助于加快查询速度 tag | site 123 | 456 789 | 101 如果表中只有这些列,那么答案是否定的,它不会加快查询速度,因为它必须处理整行 如果不是,那么是的,在所选列上添加索引可以加快查询速度,因为优化器将能够选择值,而无需实际处理整行 通常,您应该只为筛选依据的列编制索引。我建议在选定的列上添加一个索引仅当您实际使用此格式的select lot时,否则,缺点(例如插入

我有一个相当常见的设置,我有一个标签表和记录对。查询它的速度很慢,因此向我正在查询的标记的列添加索引有助于加快查询速度

tag | site 123 | 456 789 | 101

如果表中只有这些列,那么答案是否定的,它不会加快查询速度,因为它必须处理整行

如果不是,那么是的,在所选列上添加索引可以加快查询速度,因为优化器将能够选择值,而无需实际处理整行

通常,您应该只为筛选依据的列编制索引。我建议在选定的列上添加一个索引仅当您实际使用此格式的select lot时,否则,缺点(例如插入速度慢)可以克服优点

注意:您的典型查询实际上应该如下所示:

SELECT
site
,
tag
FROM
sitetags
WHERE
tag
='123' OR
tag
= '789'
WHERE tag IN('123','789')

如果总是按
tag
搜索,则只需为
tag
列编制索引

在不使用列的情况下将列添加到索引中,在插入或更新记录时会带来不必要的开销,并且会占用更多的存储空间

但是复合索引(
tag
site
)可能会提供额外的优化,因为MySQL只需要读取索引来满足您的查询(
EXPLAIN
通常将此优化标记为
使用索引

如果您的操作主要是读操作而不是写操作,那么使用复合索引可能不是一个坏主意

如果
tag
列具有较高的基数,则更好,这意味着它们的值很可能在每行之间不同


但我建议您先查阅
解释
输出

如果您有一个小表,那么索引是不好的,但它会降低性能;如果您有一个大表,那么索引是好的,它可以显著提高搜索性能。唯一的约束就是索引。因此,如果使用unique约束将该对定义为unique,则该对的索引总是存在的。