Beim Vergleich der ersten beiden Anweisungen wird festgestellt, dass die zweite Anweisung keinen Index verwendet, wenn die Anzahl der gescannten Zeilen einen bestimmten Wert erreicht.
Der vollständige Tabellenscan zeigt, dass die Anzahl der gescannten Zeilen 70341 beträgt, die Gesamtzahl der Datenzeilen jedoch nur 57087?
select count(*) verwendet einen Index, scannt aber auch 70341 Zeilen. Verursacht diese Anweisung Leistungsprobleme?
CBO优化机制的数据库中,没有明确的使用或不适用索引的临界值,以执行计划中的COST最小为标准,经验值是取表总行数小于5%的时候用索引比较合适。
我理解第二个语句使用的是表的统计数据,如果表最近发生过比较大的变更,统计数据有没有及时更新,会出现两者偏差较大的情况。
count(*)使用了索引,说明update_at字段有NOT NULL的定义,相比较全表扫描,扫描索引的成本会更低一些。