вы должны использовать
double g=1.0/3;
или
double g=1/3.0;
Целочисленное деление возвращает целое число.
NUM_ROWS
показывает количество строк на основе последнего анализа, поэтому вы не должны полагаться на него. Я предлагаю запустить подсчет, например.
SELECT COUNT(*)
FROM your_table PARTITION FOR (DATE '2016-04-01')
или
SELECT COUNT(ROWNUM)
FROM your_table PARTITION FOR (DATE '2016-04-01')
WHERE ROWNUM <= 1
Он должен быть намного быстрее, чем DBMS_STATS.GATHER_TABLE_STATS
(если у вас есть какой-либо индекс в этой таблице)
Исходя из информации раздела, которую вы добавили в свой вопрос, ответ ясен. Причина, по которой
SELECT COUNT() FROM per_limra PARTITION FOR (DATE '2015-06-01')
и
SELECT COUNT() FROM per_limra PARTITION FOR (DATE '2015-05-01')
возвращает 1, состоит в том, что они оба смотрят на один и тот же раздел. Ваши три раздела:
PARTITION per_limra_p004
VALUES LESS THAN ( TO_DATE('01-11-2015','DD-MM-YYYY'), i.e. less than 01-Nov-2015
PARTITION per_limra_p003
VALUES LESS THAN ( TO_DATE('01-12-2015','DD-MM-YYYY'), i.e. less than 01-Dec-2015
PARTITION per_limra_p002
VALUES LESS THAN ( TO_DATE('01-01-2016','DD-MM-YYYY'), i.e. less than 01-Jan-2016
Даты в ваших запросах: DATE '2015-06-01'
, или 01-Jun-2015, и DATE '2015-05-01'
, или 01-May-2015, оба из которых попадают в диапазон для раздела per_limra_p004
, который содержит данные для всех дат до 01 ноября 2015 года. Таким образом, оба запроса возвращают данные из одного раздела, поэтому они возвращают одно и то же значение.
Желаем удачи.
Oracle не постоянно обновляет свою статистику о таблицах и разделах, поскольку это будет слишком тяжело. После анализа таблицы статистика (например, те, что указаны в user_tab_partitions
) будут обновлены. Поскольку у Oracle теперь разные статистические данные, оптимизатор может очень хорошо создавать разные планы выполнения для ваших запросов и, таким образом, влиять на производительность.
SELECT * FROM PER_LIMRA
, чтобы посмотреть, что на самом деле находится в таблице. – Bob Jarvis 14 July 2018 в 03:46COUNT()
не работает. – Wernfried Domscheit 14 July 2018 в 09:27