问题标签 [full-table-scan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4720 浏览

oracle - 为什么甲骨文会忽略一个“完美”的索引?

我有这张桌子:

这个索引:

当我运行这个查询

EXPLAIN PLAN表明它进行了全表扫描。所以我删除了索引并再次创建它。EXPLAIN PLAN仍然说全表扫描。怎么可能?

一些背景:这是历史数据,所以发生的事情是我查找带有状态的行CLEARED并插入带有状态的新行NEW(另外我从旧行中复制了一些值)。然后将旧行更新为USED. 所以桌子总是在变大。我确实注意到索引的基数为 0(尽管我有数千个不同的值)。重新创建后,基数增加了,但 CBO 并不喜欢该指数。

第二天早上,Oracle 突然喜欢上了这个索引(可能是睡着了)并开始使用它,但时间不长。过了一会儿,处理速度从 50 行/秒下降到 3 行/秒,我再次看到“FULL TABLE SCAN”。到底是怎么回事?

就我而言,我需要处理大约一百万行。我分批提交更改。50. 在提交更新/重组索引或类似的东西后,我应该运行一些命令吗?

我在 Oracle 10g 上。

[编辑] 我在这张表中有 969'491 个不同的键,3 种类型和 3 种状态。

0 投票
1 回答
126 浏览

mysql - 使用 MySQL 中的索引进行连接的两组相同表;一个需要全表扫描

我对 MySQL 中的索引感到非常困惑。

我有两个表:TableA1 和 TableA2。

我为它们之间的连接创建了索引,并且查询运行得非常快。

我还有另外 2 个设置相同的表,例如 TableB1 和 TableB2。唯一的区别是这些表有一些空值。

出于某种原因,对 TableA 的相同查询大约快 5 倍,并且不需要全表扫描。然而,TableB 似乎使用了全表扫描,我不知道为什么。可能是导致这种情况的 Null 值吗?

我注意到在 TableA 设置中使用 EXPLAIN 时,我possible keys: myindex也得到了ref: func; 但是在 TableB 设置中,我得到的只是possible keys: NULLref: NULL.

我已经搜索了很长时间,似乎找不到相关的答案。如果有人能指出我正确的方向,将不胜感激。

(对不起,现在添加到原始问题中。)

这是表AOne:

和 TableATwo:

我将与 Field1 一起加入 Field3。

获得全表扫描的表与上述表相同。唯一的区别是它们被称为 TableB 而不是 TableA。

干杯,

0 投票
2 回答
3865 浏览

database - postgresql 是否跟踪它进行的全表扫描?

我想做类似于http://www.bestbrains.dk/Blog/2010/03/25/HowToAssertThatYourSQLDoesNotDoFullTableScans.aspx中描述的事情,但为此我需要 postgres 来跟踪任何全表扫描做。postgres有这样的东西吗?

0 投票
3 回答
308 浏览

sql - 优化大型子表的日期查询:GiST 还是 GIN?

问题

72 个子表,每个表都有一个年份索引和一个站点索引,定义如下:

(稍后添加外键约束。)

由于全表扫描,以下查询运行非常缓慢:

迟缓来自查询的这一部分:

这部分查询匹配选定的日期。例如,如果用户想要查看有数据的所有年份的 6 月 1 日至 7 月 1 日之间的数据,则上述子句仅与那些日子匹配。如果用户想查看 12 月 22 日到 3 月 22 日之间的数据,同样对于所有有数据的年份,上述子句计算 3 月 22 日是在下一年的 12 月 22 日,因此相应地匹配日期:

目前日期固定为 1 月 1 日至 12 月 31 日,但将参数化,如上所示。

计划中的 HashAggregate 显示成本为 10006220141.11,我怀疑这是天文数字。

对正在执行的测量表(本身既没有数据也没有索引)进行全表扫描。该表从其子表中聚合了 2.73 亿行。

问题

索引日期以避免全表扫描的正确方法是什么?

我考虑过的选项:

  • 杜松子酒
  • 要旨
  • 重写 WHERE 子句
  • 将 year_taken、month_taken 和 day_taken 列与表分开

你觉得呢?你有没有什么想法?

谢谢!

0 投票
4 回答
3708 浏览

azure - Azure 表存储 - 我的表扫描速度有多快?

每个人都警告不要查询 Azure 表存储 (ATS) 中的 RowKey 或 PartitionKey 以外的任何内容,以免被迫进行表扫描。有一段时间,当我需要查询其他内容时,这使我无法尝试提出完全正确的 PK 和 RK 并在其他表中创建伪二级索引。

但是,我突然想到,当我认为合适的时候,我通常会在 SQL Server 中进行表扫描。

所以问题就变成了,我能以多快的速度对 Azure 表进行表扫描。这是一个以实体/秒为单位的常数,还是取决于记录大小等。如果您想要一个响应式应用程序,是否有一些经验法则来说明有多少记录太多而无法进行表扫描?

0 投票
1 回答
318 浏览

mysql - sql(mysql)优化查询order schema,避免全表扫描

我有一张数据表。该表有订单条目,每个订单都有一些类型(或状态,例如已订购、...、抛光、包装、发货)。

现在,我想做这个查询。

type 和 shipping 有一个索引,但它只在进行全扫描后使用。所以查询需要很长时间。我想直接呈现数据。

0 投票
2 回答
1561 浏览

sqlite - SQLite:优化表扫描

在我的表中,有些列没有索引,在这些列中搜索值可能需要很长时间,因为 SQLite 会进行全表扫描。

在我的具体情况下,我正在寻找的行(值是唯一的)几乎总是在最近插入的行中。

我怀疑 SQLite 在进行扫描时从最旧(第一)行开始,有没有办法指示 SQLite 以相反的顺序进行表扫描?

更新:我在更改日志中找到了这个:

如果这样做会满足 ORDER BY ... DESC 子句,那么优化器现在将反向扫描表。

所以也许这意味着我可以添加一个 ORDER BY 子句来加快速度。

0 投票
1 回答
393 浏览

mysql - InnoDB 中列中文本的高效 MySQL SELECT

我有一个大表(InnoDB),它基本上有一个带有位置纬度和经度的位置名称。我的查询类似于

唯一的索引是自动递增列的主索引。

我更喜欢使用 InnoDB 所以 FULLTEXT 不是一个选项

我尝试的一个选项是向纬度和经度添加索引,然后做

然后我做

但它的可扩展性不是很好,因为 $result 可以有数千个条目并且占用太多内存

目前,我采用了全表扫描(上面的第一个查询),但每个查询需要 0.5-1 秒,因此我们将不胜感激。

谢谢

0 投票
2 回答
1906 浏览

sql-server - 当 PK 中的第一个字段几乎没有不同的值时,Sql Server 进行全表扫描

我有这张表(TableA):

几乎没有不同的 FieldA 值,假设 FieldA 可以是 {1,2,3,4,5,6}。

为什么这个查询会导致全表扫描:

虽然这不是:

Sql Server 不能优化这个吗?如果我有 TableB,其中 FieldA 是一个 PK,并且我加入了 TableB 和 TableA,则查询将与第二个查询类似地运行。

0 投票
1 回答
285 浏览

mapreduce - 数百万条记录的增量更新,索引与连接

我目前正在制定一项增量更新用户数据的策略。我们假设我们的数据库中有 100_000_000 条记录,其中每个工作流更新大约 1_000_000 条记录。

这个想法是更新 MapReduce 作业中的记录。使用索引存储(例如 Cassandra)能够随机访问当前记录是否有用?还是最好从 HDFS 检索数据并将新信息加入现有记录。

记录大小为 O(200 字节)。用户数据具有固定长度,但应该是可扩展的。日志事件具有相似但不相等的结构。用户记录的数量可能会增加。近实时更新是可取的,即。3小时的时间间隔是不可接受的,几分钟就可以了。

您是否对这些策略和这种规模的数据有任何经验?pig JOIN 速度够快吗?总是读取所有记录是瓶颈吗?Cassandra 是否能够有效地保存这么多数据?哪种解决方案是可扩展的?系统的复杂性如何?