我从两个相同的表中运行Select * from TABLE
,唯一的区别是一个没有索引。
没有任何索引的表花了7分钟,索引的表花了5分钟。
这些表各有29000行。
这是正常的吗?这是否也发生在其他数据库服务器中?
答案 0 :(得分:-1)
由于信息太少,这有点疯狂猜测。一些可以解释差异的想法:
如果您的表甚至没有聚集索引(通常是主键),它将存储为堆。聚簇索引页面具有指向下一页的链接,因此它们允许快速顺序遍历。堆页面没有这样的链接,引擎必须不断地返回索引分配映射(IAM)页面。这个事实可以解释堆的完整扫描可能比聚簇索引的完整扫描慢。
您没有查询完全相同的表格,因此可能会发挥一些外部因素。桌子怎么填满?也许他们没有相同的碎片级别。碎片表的读取速度较慢。
你真的在做“SELECT * FROM ...”还是这个问题的捷径?因为如果您确实只选择了列的一个子集,则可能在覆盖索引中找到它们,这显然比完整的表数据更快。