单列/多列索引,哪个更好?

| 我有一个性能不佳的程序,其中有几个查询。 我已经确定了一些扫描临时表的临时表查询。我决定在临时表上添加索引以避免表扫描。我注意到在where子句中使用了多个临时表列。但是,我不确定是否应该将所有列都包含在单个索引(复合索引)中,还是将多个索引包含在每个索引中的一个列中以获取最佳性能。 数据库是DB2     
已邀请:
        所有这些都很大程度上取决于您的查询和表中的数据。根据经验,您应只包括大大减少结果行的列。 如果第一个限制列的where子句已经减少了例如90%的行,而下一个限制列仅减少了几百行,则不值得将资源包括在索引中。始终记住,数据库引擎首先使用复合索引的第一列,然后再处理下一个。如果您的查询的列顺序不同,则索引可能甚至会启动,从而降低查询速度。 另外,如果您有大量数据,并且使用多个索引列似乎值得,那么在某些情况下,您可能希望拥有单独的索引并进行帧内并行处理。如果您的服务器需要备用,则使用多个CPU运行并行索引查找可能会获得更好的性能。     
        如果是MySQL,可以将多列索引用于测试索引中所有列的查询,或者仅测试第一列,前两列,前三列等的查询。 如果在索引定义中以正确的顺序指定列,则单个组合索引可以加快对同一表的几种查询。 假设您在表格测试中创建了“ 0” 因此,在以下查询中,nameIdx索引用于查找:
SELECT * FROM test WHERE last_name=\'Widenius\';

SELECT * FROM test
  WHERE last_name=\'Widenius\' AND first_name=\'Michael\';

SELECT * FROM test
  WHERE last_name=\'Widenius\'
  AND (first_name=\'Michael\' OR first_name=\'Monty\');
其中名称nameIdx在以下查询中不用于查找:
SELECT * FROM test WHERE first_name=\'Michael\';

SELECT * FROM test
  WHERE last_name=\'Widenius\' OR first_name=\'Michael\';
有关更多详细信息,请参见URL 对此的摘要是,如果您按照索引顺序(从左到右)在where子句中使用列,那么它比单列索引更好     

要回复问题请先登录注册