如果我在不同的列上有一个索引表,那么数据库在执行查询时是否会使用这两个索引?另外,如果我有4列的索引,另一列的附加索引,对所有5列的查询是否可以使用这个第二个索引,还是在匹配第一个索引后它只是一个区域扫描?
答案 0 :(得分:2)
如果我的表有一个不同列的索引,那么数据库在执行查询时是否会使用这两个索引?
如果基于成本的查询优化器确定使用多个索引更有效,是,它会。如果进行扫描效率更高(通常是这样),那么即使您认为应该进行扫描,也可能不会使用索引。
此外,如果我有4列的索引和另一列的附加索引,对所有5列的查询是否可以使用此第2个索引,或者在匹配第一个索引后它只是一个区域扫描?
同样,如果优化器认为这样做是有效的,那么它会对同一个查询使用其他索引。如果它确定索引的成本更高......它将忽略它。这一切都取决于它是否具有选择性(或者更确切地说,优化器认为的选择性,基于最新的统计数据)是否会使用索引。如果它没有选择性(不会对结果进行多大缩小),它可能会忽略它。
答案 1 :(得分:2)
它取决于优化器和查询,但优化器相对很少在单个查询中的单个表上使用两个单独的索引。在他们可能甚至可能的情况下构建示例是完全可行的 - 有些人可能实际上这样做。考虑:
但是,要小心指责优化器不高效 - 通过其他方法解析查询可能仍然有优势。
回答你的'4列索引'问题:这是不太可能的。在这种情况下,4列索引可能提供良好的选择性,并且通过将额外的过滤条件应用于索引扫描检索的行,可以最轻松地解析查询。 (请注意,答案可能会有所不同,具体取决于额外条件是否通过AND(如我所假设)或OR(使用第二个索引可能有用)连接到另一个条件。
答案 2 :(得分:0)
这取决于针对这些表发出的查询,表的大小以及索引列中数据的选择性。
优化程序使用统计信息来确定使用索引是否有益。
答案 3 :(得分:0)
1.IF我有一个表,每个表都有一个不同列的索引,数据库在执行查询时是否曾使用这两个索引?
当然可以,例如,如果你有表
员工(
id(index1)
名称
地址
日期(index2))
和表格
任务(
id
employee_id(index3)
日期(索引4)
类别
描述)
如果您进行查询:
这将列出每天每个员工的所有任务以及用户index1和index2以及index4和index3。如果我缺少index1或index2,那将花费更多的时间。
2.如果我有4列的索引和另一列的附加索引,对所有5列的查询是否可以使用此第2个索引,或者只是在匹配第一个索引后进行区域扫描?
当然可以这样做,但查询应该包括4列索引和单列索引的连接。