标签: full-table-scan

我可以在索引的子文档字段上执行MongoDB"start with"查询吗?

我正在尝试查找字段以值开头的文档.

使用notablescan禁用表扫描.

这有效:

db.articles.find({"url" : { $regex : /^http/ }})
Run Code Online (Sandbox Code Playgroud)

这不是:

db.articles.find({"source.homeUrl" : { $regex : /^http/ }})
Run Code Online (Sandbox Code Playgroud)

我收到错误:

error: { "$err" : "table scans not allowed:moreover.articles", "code" : 10111 }
Run Code Online (Sandbox Code Playgroud)

两者都有索引urlsource.homeUrl:

{
    "v" : 1,
    "key" : {
        "url" : 1
    },
    "ns" : "mydb.articles",
    "name" : "url_1"
}

{
    "v" : 1,
    "key" : {
        "source.homeUrl" : 1
    },
    "ns" : "mydb.articles",
    "name" : "source.homeUrl_1",
    "background" : true
}
Run Code Online (Sandbox Code Playgroud)

对子文档索引的正则表达式查询有任何限制吗?

regex indexing search mongodb full-table-scan

29
推荐指数
1
解决办法
5万
查看次数

cassandra中的全表扫描问题

第一:我知道在Cassandra进行全面扫描并不是一个好主意,但是,目前,这就是我需要的.

当我开始寻找像这样做的东西时,我读到人们说不可能在卡桑德拉进行全面扫描而且他没有做这种事情.

不满意,我一直在寻找,直到找到这篇文章:http: //www.myhowto.org/bigdata/2013/11/04/scanning-the-entire-cassandra-column-family-with-cql/

看起来很合理,我试一试.因为我将只执行一次全扫描,时间和性能不是问题,我编写了查询并将其放在一个简单的Job中查找我想要的所有记录.从20亿行记录中,1000个是我预期的输出,但是,我只有100条记录.

我的工作:

public void run() {
    Cluster cluster = getConnection();
    Session session = cluster.connect("db");

    LOGGER.info("Starting ...");

    boolean run = true;
    int print = 0;

    while ( run ) {
        if (maxTokenReached(actualToken)) {
            LOGGER.info("Max Token Reached!");
            break;
        }
        ResultSet resultSet = session.execute(queryBuilder(actualToken));

        Iterator<Row> rows = resultSet.iterator();
        if ( !rows.hasNext()){
            break;
        }

        List<String> rowIds = new ArrayList<String>();

        while (rows.hasNext()) {
            Row row = rows.next();

            Long leadTime = row.getLong("my_column");
            if (myCondition(myCollumn)) {
                String rowId = row.getString("key");
                rowIds.add(rowId); …
Run Code Online (Sandbox Code Playgroud)

java cassandra full-table-scan

13
推荐指数
1
解决办法
5180
查看次数

为什么左联接会导致优化器忽略索引?

使用postgres 9.6.11,我有一个类似的架构:

所有者:

id: BIGINT (PK)
dog_id: BIGINT NOT NULL (FK)
cat_id: BIGINT NULL (FK)

index DOG_ID_IDX (dog_id)
index CAT_ID_IDX (cat_id)
Run Code Online (Sandbox Code Playgroud)

动物:

id: BIGINT (PK)
name: VARCHAR(50) NOT NULL

index NAME_IDX (name)
Run Code Online (Sandbox Code Playgroud)

在某些示例数据中:

所有者表:

| id | dog_id | cat_id |
| -- | ------ | ------ |
| 1  | 100    | 200    |
| 2  | 101    | NULL   |
Run Code Online (Sandbox Code Playgroud)

动物桌:

| id  | name     |
| --- | -------- |
| 100 | "fluffy" |
| 101 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql left-join database-performance full-table-scan

7
推荐指数
1
解决办法
90
查看次数

Azure表存储 - 我可以多快扫描一次?

每个人都警告不要在Azure表存储(ATS)中查询RowKey或PartitionKey以外的任何内容,以免被迫进行表扫描.有一段时间,当我需要查询其他内容时,这让我陷入困境,试图找到正确的PK和RK并在其他表中创建伪二级索引.

但是,在我认为合适时,我会在SQL Server中进行常见的表扫描.

所以问题就变成了,我可以多快地扫描Azure表.这是实体/秒中的常量还是取决于记录大小等.如果您需要响应式应用程序,是否有一些关于有多少记录对于表扫描来说太多的经验法则?

azure full-table-scan azure-table-storage

6
推荐指数
1
解决办法
2909
查看次数

MySql Server 系统变量 --max-seeks-for-key - 实际示例

我正在阅读 MySql 索引优化的文档。

我找到了一个设置 --max-seeks-for-key=1000.I 在这里检查了 MySQL 的“服务器系统变量” 。
根据它

“通过将其设置为较低的值(例如 100),您可以强制 MySQL 更喜欢索引而不是表扫描”

.
我从全表扫描中了解到:

当查询需要访问大部分行时,顺序读取比通过索引读取要快。顺序读取最小化磁盘搜索,即使查询不需要所有行。

因此,如果 MySQL 正在执行全表扫描以最小化磁盘搜索,为什么要使用 --max-seeks-for-key=1000 来首选索引扫描,这可能会增加磁盘搜索。

在文档8.3.1.20 如何避免全表扫描中提到它是避免全扫描的一个步骤:使用 --max-seeks-for-key=1000 启动 mysqld

所以我很想知道 --max-seeks-for-key 是否有任何实际和有意义的用途。

mysql full-table-scan

5
推荐指数
1
解决办法
931
查看次数

postgresql 是否会跟踪它所做的全表扫描?

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

database postgresql full-table-scan

3
推荐指数
1
解决办法
3356
查看次数

为什么NonClustered索引扫描比聚簇索引扫描更快?

据我所知,堆表是没有聚簇索引的表,没有物理顺序.我有一个堆栈表"扫描"有120k行,我使用这个选择:

SELECT id FROM scan
Run Code Online (Sandbox Code Playgroud)

如果我为列"id"创建一个非聚集索引,我会得到223个物理读取.如果我删除非聚集索引并更改表以使"id"成为我的主键(以及我的聚集索引),我将获得515个物理读取.

如果聚集索引表是这样的图片:

在此输入图像描述

为什么Clustered Index Scans像表扫描一样工作?(或者在检索所有行的情况下更糟).为什么它不使用具有较少块的"聚簇索引表"并且已经具有我需要的ID?

sql sql-server indexing full-table-scan sql-execution-plan

3
推荐指数
1
解决办法
4059
查看次数

如何使用LIKE运算符避免全表扫描

我在使用不同的正确查询更改PL/SQL oracle中的查询时遇到问题.当前查询:

SELECT MAX (workzone)
           FROM sccd_device_uim_tab
          WHERE NAME LIKE 18075009 || '%';
Run Code Online (Sandbox Code Playgroud)

我的客户需要修改查询,因为:

Full table with a % should definitely be avoided.
Run Code Online (Sandbox Code Playgroud)

这个问题有什么解决方案?

提前致谢


从包中添加查询

PROCEDURE sccd_get_impactservice_manual (
      in_faultid          IN       VARCHAR2,
      in_deviceid         IN       VARCHAR2,
      in_status           IN       VARCHAR2,
      in_opendate         IN       DATE,
      in_closedate        IN       DATE,
      out_impact_result   OUT      tcur,
      out_count_service   OUT      NUMBER,
      out_workzone        OUT      VARCHAR2,
      p_ret_char          OUT      VARCHAR2,
      p_ret_number        OUT      NUMBER,
      p_ret_msg           OUT      VARCHAR2
   )
   IS
   BEGIN
      SELECT orauser.ossa_get_sto_from_device (in_deviceid)
        INTO out_workzone
        FROM DUAL;

      IF out_workzone IS NULL
      THEN
         SELECT MAX (workzone) …
Run Code Online (Sandbox Code Playgroud)

sql oracle indexing full-table-scan sql-like

3
推荐指数
1
解决办法
2974
查看次数

Oracle索引 - 全表扫描/锁定

在这里找到:

通常,考虑在以下任何一种情况下在列上创建索引:

  • 索引的一列或多列上存在参照完整性约束.索引是一种避免全表锁定的方法,如果更新父表主键,合并到父表或从父表中删除,则需要使用该表.

我不明白为什么在这种情况下会发生全表锁.我想如果我试图删除/更新父表中的主键,那么将对子表执行全表扫描.

锁从哪里来?

oracle indexing table-lock full-table-scan

2
推荐指数
1
解决办法
1403
查看次数

如何理解避免全表扫描

我有一个表负责存储日志.DDL是这样的:

CREATE TABLE LOG(
    "ID_LOG" NUMBER(12,0) NOT NULL ENABLE, 
    "DATA" DATE NOT NULL ENABLE, 
    "OPERATOR_CODE" VARCHAR2(20 BYTE), 
    "STRUCTURE_CODE" VARCHAR2(20 BYTE), 

     CONSTRAINT "LOG_PK" PRIMARY KEY ("ID_LOG")
 );
Run Code Online (Sandbox Code Playgroud)

有这两个指数:

CREATE INDEX STRUCTURE_CODE ON LOG ("OPERATOR_CODE");

CREATE INDEX LOG_01 ON LOG ("STRUCTURE_CODE", "DATA") ;
Run Code Online (Sandbox Code Playgroud)

但是这个查询产生了一个完整的表扫描:

SELECT log.data AS data1, 
       OPERATOR_CODE,
       STRUCTURE_CODE
  FROM log
 WHERE data BETWEEN to_date('03/03/2008', 'DD-MM-YYYY')
                AND to_date('08/03/2015', 'DD-MM-YYYY')
   AND STRUCTURE_CODE = '1601';
Run Code Online (Sandbox Code Playgroud)

为什么我总是看到一个FULL TABLE SCANDATASTRUCTURE_CODE

(我也试过创建两个不同的索引STRUCTURE_CODE,DATA但我总是进行全表扫描)

sql oracle query-optimization full-table-scan

2
推荐指数
1
解决办法
366
查看次数