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