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