Индекс первичного ключа не используется

В C переменная внутри файла say example.c предоставляется локальная область. Компилятор ожидает, что переменная будет иметь свое определение внутри одного и того же файла example.c, и когда он не найдет то же самое, это вызовет ошибку. Функция, с другой стороны, имеет глобальную область по умолчанию. Таким образом, вам не нужно явно упоминать компилятор «посмотрите чувак ... вы можете найти определение этой функции здесь». Для функции, содержащей файл, содержащий его объявление, достаточно. (Файл, который вы на самом деле называете заголовочным файлом). Например, рассмотрим следующие 2 файла: example.c

#include<stdio.h>
extern int a;
main(){
       printf("The value of a is <%d>\n",a);
}

example1.c

int a = 5;

Теперь, когда вы скомпилируете два файла вместе, используйте следующие команды:

шаг 1) cc -o ex example.c example1.c, этап 2) ./ ex

Вы получаете следующий вывод: значение a равно & lt; 5 & gt;

0
задан Pavel Smirnov 21 March 2019 в 14:01
поделиться

1 ответ

Прежде всего, вы должны учитывать, что индексы не всегда являются хорошей идеей .

Если Oracle будет читать большинство данных из таблицы, она будет использовать FULL TABLE SCAN, поскольку это быстрее, чем сначала чтение блоков индекса, а затем чтение блоков данных. Слишком много операций ввода-вывода.

Теперь вернемся к вашему вопросу.
Вы можете заставить Oracle использовать индекс, если хотите, предоставив подсказку:

/*+ INDEX(table_name index_name) */

Вы можете добавить его в свой запрос и проверить, что происходит с планом запроса, и сколько будет стоить новый план:

SELECT  /*+ INDEX(tableA index_name) */     --replace 'index_name' with the name of your index
        d.id,
        'Status' "ImportStatus",
        p.importid "ImportID",
        macid,
        p.daterequire "CreateDate",
        p.dateimport "DateImPort",
        TRANSLATE(p.accrequire USING NCHAR_CS) "CreateBy",
        TRANSLATE(p.accimport USING NCHAR_CS) "AccImPort",
        0 "isEdit",
        employee,
        deptid partner,
        equipmentid
    FROM
        (
            SELECT 
                id,
                importid,
                daterequire,
                dateimport,
                accrequire,
                accimport,
                subdeptid employee,
                deptid
            FROM
                tableA
            WHERE
                estatus = 2
                AND createdate BETWEEN to_timestamp('01/01/2019','dd/mm/yyyy') AND to_timestamp('12/02/2019','dd/mm/yyyy')
        ) p
        INNER JOIN tableB d ON d.importid = p.id
0
ответ дан Pavel Smirnov 21 March 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: