问题标签 [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.
oracle - 为什么甲骨文会忽略一个“完美”的索引?
我有这张桌子:
这个索引:
当我运行这个查询
EXPLAIN PLAN
表明它进行了全表扫描。所以我删除了索引并再次创建它。EXPLAIN PLAN
仍然说全表扫描。怎么可能?
一些背景:这是历史数据,所以发生的事情是我查找带有状态的行CLEARED
并插入带有状态的新行NEW
(另外我从旧行中复制了一些值)。然后将旧行更新为USED
. 所以桌子总是在变大。我确实注意到索引的基数为 0(尽管我有数千个不同的值)。重新创建后,基数增加了,但 CBO 并不喜欢该指数。
第二天早上,Oracle 突然喜欢上了这个索引(可能是睡着了)并开始使用它,但时间不长。过了一会儿,处理速度从 50 行/秒下降到 3 行/秒,我再次看到“FULL TABLE SCAN”。到底是怎么回事?
就我而言,我需要处理大约一百万行。我分批提交更改。50. 在提交更新/重组索引或类似的东西后,我应该运行一些命令吗?
我在 Oracle 10g 上。
[编辑] 我在这张表中有 969'491 个不同的键,3 种类型和 3 种状态。
mysql - 使用 MySQL 中的索引进行连接的两组相同表;一个需要全表扫描
我对 MySQL 中的索引感到非常困惑。
我有两个表:TableA1 和 TableA2。
我为它们之间的连接创建了索引,并且查询运行得非常快。
我还有另外 2 个设置相同的表,例如 TableB1 和 TableB2。唯一的区别是这些表有一些空值。
出于某种原因,对 TableA 的相同查询大约快 5 倍,并且不需要全表扫描。然而,TableB 似乎使用了全表扫描,我不知道为什么。可能是导致这种情况的 Null 值吗?
我注意到在 TableA 设置中使用 EXPLAIN 时,我possible keys: myindex
也得到了ref: func
; 但是在 TableB 设置中,我得到的只是possible keys: NULL
和ref: NULL
.
我已经搜索了很长时间,似乎找不到相关的答案。如果有人能指出我正确的方向,将不胜感激。
(对不起,现在添加到原始问题中。)
这是表AOne:
和 TableATwo:
我将与 Field1 一起加入 Field3。
获得全表扫描的表与上述表相同。唯一的区别是它们被称为 TableB 而不是 TableA。
干杯,
柯
database - postgresql 是否跟踪它进行的全表扫描?
我想做类似于http://www.bestbrains.dk/Blog/2010/03/25/HowToAssertThatYourSQLDoesNotDoFullTableScans.aspx中描述的事情,但为此我需要 postgres 来跟踪任何全表扫描做。postgres有这样的东西吗?
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 列与表分开
你觉得呢?你有没有什么想法?
谢谢!
azure - Azure 表存储 - 我的表扫描速度有多快?
每个人都警告不要查询 Azure 表存储 (ATS) 中的 RowKey 或 PartitionKey 以外的任何内容,以免被迫进行表扫描。有一段时间,当我需要查询其他内容时,这使我无法尝试提出完全正确的 PK 和 RK 并在其他表中创建伪二级索引。
但是,我突然想到,当我认为合适的时候,我通常会在 SQL Server 中进行表扫描。
所以问题就变成了,我能以多快的速度对 Azure 表进行表扫描。这是一个以实体/秒为单位的常数,还是取决于记录大小等。如果您想要一个响应式应用程序,是否有一些经验法则来说明有多少记录太多而无法进行表扫描?
mysql - sql(mysql)优化查询order schema,避免全表扫描
我有一张数据表。该表有订单条目,每个订单都有一些类型(或状态,例如已订购、...、抛光、包装、发货)。
现在,我想做这个查询。
type 和 shipping 有一个索引,但它只在进行全扫描后使用。所以查询需要很长时间。我想直接呈现数据。
sqlite - SQLite:优化表扫描
在我的表中,有些列没有索引,在这些列中搜索值可能需要很长时间,因为 SQLite 会进行全表扫描。
在我的具体情况下,我正在寻找的行(值是唯一的)几乎总是在最近插入的行中。
我怀疑 SQLite 在进行扫描时从最旧(第一)行开始,有没有办法指示 SQLite 以相反的顺序进行表扫描?
更新:我在更改日志中找到了这个:
如果这样做会满足 ORDER BY ... DESC 子句,那么优化器现在将反向扫描表。
所以也许这意味着我可以添加一个 ORDER BY 子句来加快速度。
mysql - InnoDB 中列中文本的高效 MySQL SELECT
我有一个大表(InnoDB),它基本上有一个带有位置纬度和经度的位置名称。我的查询类似于
唯一的索引是自动递增列的主索引。
我更喜欢使用 InnoDB 所以 FULLTEXT 不是一个选项
我尝试的一个选项是向纬度和经度添加索引,然后做
然后我做
但它的可扩展性不是很好,因为 $result 可以有数千个条目并且占用太多内存
目前,我采用了全表扫描(上面的第一个查询),但每个查询需要 0.5-1 秒,因此我们将不胜感激。
谢谢
sql-server - 当 PK 中的第一个字段几乎没有不同的值时,Sql Server 进行全表扫描
我有这张表(TableA):
几乎没有不同的 FieldA 值,假设 FieldA 可以是 {1,2,3,4,5,6}。
为什么这个查询会导致全表扫描:
虽然这不是:
Sql Server 不能优化这个吗?如果我有 TableB,其中 FieldA 是一个 PK,并且我加入了 TableB 和 TableA,则查询将与第二个查询类似地运行。
mapreduce - 数百万条记录的增量更新,索引与连接
我目前正在制定一项增量更新用户数据的策略。我们假设我们的数据库中有 100_000_000 条记录,其中每个工作流更新大约 1_000_000 条记录。
这个想法是更新 MapReduce 作业中的记录。使用索引存储(例如 Cassandra)能够随机访问当前记录是否有用?还是最好从 HDFS 检索数据并将新信息加入现有记录。
记录大小为 O(200 字节)。用户数据具有固定长度,但应该是可扩展的。日志事件具有相似但不相等的结构。用户记录的数量可能会增加。近实时更新是可取的,即。3小时的时间间隔是不可接受的,几分钟就可以了。
您是否对这些策略和这种规模的数据有任何经验?pig JOIN 速度够快吗?总是读取所有记录是瓶颈吗?Cassandra 是否能够有效地保存这么多数据?哪种解决方案是可扩展的?系统的复杂性如何?