От двойного оракула что это
Обновлено: 21.11.2024
Таблица DUAL создается Oracle автоматически и содержит один столбец (DUMMY) и одну строку (значение x).
Эта таблица часто используется разработчиками SQL в коде PL/SQL (пакет, функции, триггер) для инициализации переменных, хранящих техническую информацию, такую как, например, SYSDATE, USER или HOSTNAME.
Запрос к таблице DUAL обычно выполняется быстрее, как показано ниже:
Но что происходит, когда этот «SELECT FROM DUAL» выполняется несколько раз в приложении:
Выполним его для 100, 1000, 10000, 100000 и 1000000 запусков
Давайте теперь выполним блок PL/SQL, чтобы напрямую назначить переменную v_date с помощью SYSDATE вместо использования «SELECT FROM DUAL»:
Вывод:
Число исполнений | ВЫБРАТЬ ИЗ ДВОЙНОГО | Назначение переменной |
100 | 1 мс < br /> | 0 мс |
1000 | 1 мс | 0 мс |
10000 | 8 мс | 1 мс |
100000 | 85 мс < /td> | 14 мс |
1000000 | 8,34 с | 1,28 с |
«ВЫБРАТЬ ИЗ ДВОЙНОГО» всегда медленнее, чем «Назначение переменной»:
- В 8 раз медленнее для 10 000 выполнений
- В 6 раз медленнее для 100 000 выполнений
- Более чем в 8 раз медленнее при 1 000 000 выполнений.
С точки зрения производительности vew следует избегать использования «SELECT FROM DUAL» для инициализации переменной, потому что при запросе таблицы DUAL в блоке PL/SQL оптимизатор oracle выполняет циклический обмен между механизмом PL/SQL и механизмом SQL. . Для нескольких строк это быстро, но для нескольких строк (пример: 1000000) «ВЫБРАТЬ ИЗ ДВОЙНОГО» неэффективно, потому что оракул будет выполнять 1000000 циклов обмена между механизмом PL/SQL и механизмом SQL.
Я видел много приложений, где везде используется «ВЫБЕРИТЕ ИЗ ДВОЙНОГО» (например, «ВЫБЕРИТЕ ИЗ ДВОЙНОГО» в триггере входа в систему. ), в то время как мы можем использовать простое «Назначение переменной», и изменение кода увеличилось. производительность приложения значительно.
Оставить ответ Отменить ответ
Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.
DUAL — это специальная таблица с одной строкой и одним столбцом, присутствующая по умолчанию во всех базах данных Oracle. Владельцем DUAL является SYS (SYS владеет словарем данных, поэтому DUAL является частью словаря данных), но доступ к DUAL может получить каждый пользователь. В таблице есть один столбец VARCHAR2(1) с именем DUMMY, который имеет значение «X». MySQL позволяет указывать DUAL как таблицу в запросах, которым не нужны данные из каких-либо таблиц. В SQL Server таблицы DUAL не существует, но вы можете ее создать.
Таблица DUAL была создана Чарльзом Вайсом из корпорации Oracle, чтобы предоставить таблицу для объединения во внутренних представлениях.
См. следующие команды:
Следующая команда отображает структуру таблицы DUAL:
Следующая команда отображает содержимое таблицы DUAL:
Следующая команда отображает количество строк таблицы DUAL:
Следующая команда отображает строковое значение из таблицы DUAL:
Следующая команда отображает числовое значение из таблицы DUAL:
Следующая команда пытается удалить все строки из таблицы DUAL:
Следующая команда пытается удалить все строки из таблицы DUAL:
Примечание. Команда DELETE используется для удаления строк из таблицы. После выполнения операции DELETE вам необходимо СОВЕРШИТЬ или ОТМЕНИТЬ транзакцию, чтобы сделать изменение постоянным или отменить его. TRUNCATE удаляет все строки из таблицы. Откат операции невозможен.
Следующая команда выбирает две строки из двойного:
Пример – 1
Вы также можете проверить системную дату из таблицы DUAL, используя следующую инструкцию:
Пример – 2
Вы также можете проверить арифметические вычисления из таблицы DUAL, используя следующую инструкцию:
Пример – 3
Следующий код отображает числа 1..10 из DUAL :
Пример – 4
В следующем коде DUAL включает использование декодирования с NULL.
ДВОЙНАЯ таблица: Oracle против MySQL
Мы уже узнали, что DUAL — это специальная таблица с одной строкой и одним столбцом. Для Oracle это полезно, потому что Oracle не допускает таких операторов, как:
Но будет выполнена следующая команда (см. вывод предыдущего примера):
В случае MySQL будет выполнена следующая команда:
В следующей таблице показано использование фиктивной таблицы в стандартной СУБД.
СУБД | Концепция фиктивной таблицы |
---|---|
MSSQL | Нет концепции фиктивной таблицы.< /td> |
MySQL | Нет концепции фиктивной таблицы. |
Oracle | Пустота -table : DUAL. |
Informix | Начиная с версии 11.10 была включена фиктивная таблица: sysmaster:sysdual | PostgreSQL | Нет концепции фиктивной таблицы. |
DB2 | Пустой-таблица: SYSIBM.SYSDUMMY1 тд> |
">SYSDATE |
" data-sheets-numberformat=" ">03/JUL/16 |
Зачем использовать таблицу DUAL?
Возможно, вам интересно, зачем нам вообще использовать эту таблицу DUAL? Мы не выбираем никаких данных из базы данных, поэтому не должны ли мы сказать SELECT SYSDATE без части FROM DUAL?
Ну, это потому, что Oracle нужно имя таблицы со всеми операторами SELECT. Даже если он вам на самом деле не нужен.
Поэтому, если вы попытаетесь запустить SELECT SYSDATE отдельно, без части FROM DUAL, вы получите сообщение об ошибке.
Теперь это относится только к Oracle. Если вы использовали SQL Server или MySQL, вам не нужно указывать таблицу DUAL.
Какие столбцы можно выбрать?
Я упоминал ранее, что таблица DUAL — это фиктивная таблица, используемая для функций и вычислений в ваших запросах.
Обычно при выполнении оператора SELECT необходимо указать столбцы, которые существуют в вашей таблице.
В этом случае столбцы first_name и last_name должны существовать в таблице учащихся.
Но если таблица DUAL используется по разным причинам, как она узнает, какие столбцы вам нужны?
Ответ: это не имеет значения.
Таблица DUAL является "фиктивной" таблицей. Неважно, какие столбцы вы укажете в операторе SELECT, вам не обязательно иметь их в таблице DUAL.
Какова структура таблицы DUAL?
В таблице DUAL есть:
- Один столбец с именем DUMMY, который имеет тип VARCHAR2(1)
- Одна строка со значением "X".
- Принадлежит схеме SYS
Итак, это выглядит так:
">МАКАНА |
">'X' |
Какова история таблицы DUAL и почему она называется DUAL?
Согласно Википедии, таблица DUAL была создана сотрудником Oracle Чаком Вайсом. Первоначально он использовался для объединения внутренних представлений:
Я создал таблицу DUAL в качестве базового объекта в словаре данных Oracle. Он никогда не предназначался для просмотра сам по себе, а вместо этого использовался внутри представления, которое, как ожидается, будет запрашиваться. Идея заключалась в том, что вы могли бы выполнить JOIN для таблицы DUAL и создать две строки в результате для каждой строки в вашей таблице. Затем, используя GROUP BY, результирующее соединение можно суммировать, чтобы показать объем хранилища для экстента DATA и экстента(ов) INDEX. Название DUAL подходит для процесса создания пары строк из одной.
Итак, причина, по которой он называется ДВОЙНЫМ, заключается в том, что изначально он имел две строки и использовался для создания пары строк всего из одной.
Можем ли мы удалить таблицу DUAL в Oracle?
Технически можно, но не следует. Использование таблицы DUAL или любой другой таблицы в схеме SYS может привести к поломке вашей базы данных.
Нет необходимости удалять эту таблицу.
Том Кайт из AskTom опубликовал длинную ветку о внутреннем использовании таблицы DUAL. Это длинная ветка, и она довольно старая, но вы можете прочитать ее, если вам интересно.
Заключение
- Таблица DUAL представляет собой фиктивную таблицу с одной строкой и одним столбцом, используемую Oracle.
- Для операторов SELECT нужна таблица, и если она вам не нужна для вашего запроса, вы можете использовать таблицу DUAL
- Не изменяйте и не удаляйте таблицу DUAL.
В следующий раз, когда кто-нибудь спросит вас о таблице DUAL, вы сможете ответить на их вопросы и объяснить, для чего она используется!
Наконец, если вам понравилась информация и советы по карьере, которые я предоставляю, подпишитесь на мою рассылку ниже, чтобы быть в курсе моих статей. Вы также получите фантастический бонус. Спасибо!
Я нахожу это действительно странным. Если в двойном столбце нет столбца с именем 4*5, как работает оператор select?
Кроме того, почему я не вижу такого же поведения при создании собственной двойной таблицы?
9 ответов 9
Таблица DUAL — это специальная однострочная таблица, присутствующая по умолчанию во всех установках базы данных Oracle. Он подходит для использования при выборе псевдостолбца, такого как SYSDATE или USER. В таблице есть один столбец VARCHAR2(1) с именем DUMMY со значением 'X'.
Таким образом, двойная таблица — это способ выполнения операций над тем, что должно быть пустой, но не нулевой таблицей. Это полезно, когда вам не нужна таблица, но нужно выполнять операции с помощью оператора select. Если в таблице более одной строки или столбца, будет возвращено несколько результатов (из-за обработки всего набора кортежей при выполнении операции).
Его не следует использовать в рабочей среде, если только вам не нужно вызывать определенные процедуры через SQL.
4*5 — это математическая операция, так же как 'Foo' — это строка. Таким образом, точно так же, как можно выбрать 4*5 из любой таблицы, так же как можно выбрать "Foo" из любой таблицы, DUAL — это способ выбора из заведомо исправной таблицы, который никогда не будет иметь множественных результатов.
DUAL — это небольшая таблица в словаре данных, на которую могут ссылаться базы данных Oracle и написанные пользователем программы, чтобы гарантировать известный результат. Двойная таблица полезна, когда значение должно быть возвращено только один раз, например, текущая дата и время. Все пользователи базы данных имеют доступ к DUAL.
В таблице DUAL есть один столбец с именем DUMMY и одна строка, содержащая значение X.
DUAL – это таблица, автоматически создаваемая Oracle Database вместе со словарем данных. DUAL находится в схеме пользователя SYS, но доступен по имени DUAL для всех пользователей. Он имеет один столбец DUMMY, определенный как VARCHAR2(1), и содержит одну строку со значением X. Выбор из таблицы DUAL полезен для вычисления постоянного выражения с помощью инструкции SELECT. Поскольку DUAL имеет только одну строку, константа возвращается только один раз. Кроме того, вы можете выбрать константу, псевдостолбец или выражение из любой таблицы, но значение будет возвращено столько раз, сколько строк в таблице. Обратитесь к разделу "О функциях SQL" для получения многих примеров выбора постоянного значения из DUAL.
Начиная с Oracle Database 10g Release 1, логический ввод-вывод не выполняется в таблице DUAL при вычислении выражения, которое делает не включать столбец DUMMY. Эта оптимизация указана как FAST DUAL в плане выполнения. Если вы ВЫБЕРИТЕ столбец DUMMY из DUAL, то эта оптимизация не будет выполняться и будет выполняться логический ввод-вывод.
В этом посте вы узнаете о таблице Oracle DUAL, которая представляет собой специальную таблицу, используемую для вычисления выражений или вызова функций.
Теперь давайте углубимся в таблицу DUAL.
Вы можете посмотреть ниже видео о таблице DUAL, в которой показаны фрагменты кода, выполняемые в SQL Developer:
Зачем нам нужна таблица DUAL в Oracle?
В Oracle оператор SELECT должен иметь предложение FROM, в отличие от других баз данных, таких как SQL Server, My SQL, Sybase и PostgreSQL и т. д.
В этих базах данных (не Oracle) для получения даты можно просто написать:
Если вы заметили, в приведенных выше запросах SELECT нет ссылки на таблицу (предложение FROM).
Если вы новичок в Oracle и уже имеете опыт работы с вышеупомянутыми базами данных, вас может смутить вопрос о том, зачем нужно указывать предложение FROM.
Но ясно одно: предложение FROM является обязательным во всех запросах в Oracle SQL. Поэтому нам нужно переписать приведенный выше запрос, как показано ниже, в Oracle:
Конечно, вы можете оставить любую физическую таблицу вместо my_table и получить результат текущей даты.
Но проблема в том, что вы получили то же количество строк, что и сейчас в вашей физической таблице, даже для текущей даты. Очевидно, мы этого не хотим.
К счастью, Oracle предоставляет вам таблицу DUAL, которая является специальной таблицей, принадлежащей схеме пользователя SYS и доступной для всех пользователей.
В таблице DUAL есть один столбец с именем DUMMY, тип данных которого VARCHAR2(), и одна строка со значением X.
Выбор из таблицы DUAL полезен для вычисления константного выражения с помощью инструкции SELECT. Поскольку DUAL имеет только одну строку, константа возвращается только один раз.
Это показано ниже:
Используя таблицу DUAL, вы можете выполнять запросы, содержащие функции, которые не включают какую-либо таблицу, например функцию LOWER(), следующим образом:
Помимо вызова встроенных функций, вы можете использовать выражения в предложении SELECT запроса, обращающегося к таблице DUAL:
Таблица DUAL — самая простая, поскольку она предназначена для быстрого доступа.
В Oracle 10g версии 1 и выше Oracle рассматривает использование DUAL так же, как вызов функции, которая просто оценивает выражение, используемое в списке выбора.
Эта оптимизация обеспечивает даже более высокую производительность, чем прямой доступ к физической таблице DUAL.
Читайте также:
- Что такое компьютерное пиратство
- Как отправить pdf-файл на Facebook
- Как ввести чит-код в gta san andreas на ПК
- Можно ли переместить папку с файлами
- Как смотреть украинские телеканалы через интернет на компьютере