TGViewer
Oracle Developer👨🏻‍💻 Oracle Developer👨🏻‍💻 @oracle_dbd · 3.43K subscribers
Post #1453 877
DUAL: что под капотом у самой популярной таблицы Oracle

Коллеги, всем привет! 👋
На связи Денис.

Пожалуй, самая популярная таблица в мире Oracle. Каждый из нас писал select sysdate from dual сотни/тысячи раз. А вы когда-нибудь задумывались, что у неё под капотом? Давайте разберёмся.

Что такое DUAL
🔹 Обычная таблица, владелец - SYS. Всем доступна через публичный синоним DUAL.
🔹 Одна колонка DUMMY типа VARCHAR2(1).
🔹 Одна строка со значением 'X'.

Нужна она для одного: в Oracle SELECT без FROM был невозможен. А посчитать выражение, вызвать функцию или взять NEXTVAL из последовательности хочется. Вот и берём «таблицу-пустышку», где гарантированно одна строка.

Кстати, почему DUAL, если строка одна? По известной байке, изначально в ней было две строки и её использовали, чтобы «удваивать» строки через декартово соединение. Потом строку оставили одну, а название прилипло 😄

Что происходит при выполнении
Сравните два плана:

explain plan for select sysdate from dual;
-- FAST DUAL

explain plan for select * from dual;
-- TABLE ACCESS FULL | DUAL


🔸 Если колонку DUMMY не трогаем, оптимизатор (с 10g) использует операцию FAST DUAL: в таблицу вообще не ходит, логических чтений ноль.
🔸 Если выбираем * или DUMMY, Oracle честно читает таблицу полным сканом. Мелочь, но в цикле на миллион итераций уже не мелочь.

Вывод простой: select * from dual без нужды не пишите.

Oracle 23ai: DUAL больше не обязателен
В 23ai FROM стал необязательным, наконец-то как в PostgreSQL:

select sysdate;
select 2 * 2;
select my_seq.nextval;


Старый вариант с from dual тоже работает, ничего переписывать не нужно. Но в новом коде можно смело писать короче.

А вы уже пишете SELECT без FROM на 23ai или всё ещё сидите на 19c? Поделитесь в чатике 💬

С вами был Денис. Всем лёгких запросов и одной строки в DUAL 🤝

#oracle #sql #dual #oracle23ai #оптимизация #фишки #Denis_Kivilev

Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀

📱 YouTube 📱 ВКонтакте 📱 LinkedIn 📱Threads
RUTUBE
  • 👍 13
  • 🔥 6
More from @oracle_dbd
  1. Oct 1, 2026DBMS_SQL_TRANSLATOR: подменяем запрос, не трогая код 🔍 Коллеги, всем привет! 👋 На связи…
  2. Sep 30, 2026Post #1456
  3. Sep 28, 2026with function и pragma udf: обещали быстрее, проверяем 🔍 Коллеги, всем привет! 👋 На связ…
  4. Sep 25, 2026Функция в SQL-запросе: можно, но есть нюансы 🔍 Коллеги, всем привет! 👋 На связи Денис. М…
  5. Sep 19, 2026🤝 Преемственность потоков: до этой идеи мы дошли не сразу Коллеги, всем привет! 👋 На свя…
  6. Sep 18, 2026Первая встреча уже сегодня 🔥 Коллеги, всем привет! 👋 Сегодня вечером стартует первая вст…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →