Как ускорить delete oracle
Икру люблю и черную и красную, но к сожалению натуральную, и действительно вкусную в наше время.
Если вас интересуют в первую очередь качественные запчасти к бензиновому триммеру, то могу.
У меня есть пару автомобилей которые работают в такси и я раз в месяц делаю полную дезинфекцию.
Если у вас есть домашний любимец и мы заметили что с ним что-то не так, а времени у вас нет.
Я всегда обращаюсь к этим ребятам так как они качественно делают свою работу.
Как сменить пароль по умолчанию для схемы SYSTEM c 'manager' на свой? То же и для SYS
Подскажите, есть ли в PL\SQL команда, определяющая операционную систему?
Собственно, сабж :), касаемо ооочень большого предприятия. Помогите с аргументацией.
Народ. помогите лентяю - где можно накачть документацию по Oracle (не ниже 8i) на русском.
А поступить в случае, когда основная схема ничего не знает о тех схемах, которые, по идее, надо.
при использовании TO_CHAR(volume), где volume - NUMBER, если целая часть числа равна 0 (например.
делаю запрос "SELECT Column1 FROM Table1 WHERE nameid=123456" я не знаю сколько будет.
Приветствую Знающих! проскажите пожалуйста как составить sql запрос выводящий список.
Есть поле типа BLOB, в котором храниться документ в формате PDF. Необходимо извлечь данные из.
Периодически на сервере процесс Oracle грузит процессор на 100% на длительное время. В.
Добрый день! Столкнулась с такой проблемой при работе с OLAP-кубами в Excel с установленной.
После установки Oracle 8.1.7 на Windows 2000 сервере (Whistler) пытаюсь создать БД с помощью.
Очень, очень, очень, очень, очень, очень, очень не удобно сделаны комменты у вас! они нужны.
Помогите начать! Установил Oracle9i, при попытке войти в SQL*Plus запрашивает логин и пароль.
Помогите, пожалуйста, советами. С базой нельзя соединиться, возникает ora-01033. В логах.
это что издевательство такое? Oracle 7? где вы его сейчас увидите? Фильтруйте хоть немного.
Как-то не кажется, что это так "наболело". Можно было бы привести более серьёзный примерчик.
У меня Oracle 9i. Скачал на днях Designer. Поставил. При попытке запуска (des2k61.exe.
Плиз помогите, где взятьбазу данных oracle последней верссии
С помощью пакета DBMS_JOB создается JOB c указанием NEXT_DATE (даты запуска) и интервалом null.
у меня ест таблица имеющая тип BLOB и файлы хранящийся в этой таблице. Подскажите как из этой.
не как не пойму как скачать на официальном сайте Oracle Database 10g Express Edition .может кто.
Какие могут быть ошибки при установке Oracle на Windows 7 [64
Всем привет, подскажите пожалуйста как правильно установить Оракл на Линукс, может быть есть.
Доброго времени суток. У меня такая проблема: есть три таблицы: Заявка_на_недвижимость, Документ.
Добрый день! Ситуация следующая: при запуске формы происходит замена текущей схемы (alter.
Система Solaris 5.9, устанавливаем Oracle 9.0.2.1 После установки и отработке netca.
Люди добрые! Подмогните кто чем может! Сервер под Win 2003, поставил DB Oracle 10g. Вроде все.
Как с правами администратора прослеживать SQL-запросы выполненные DB Oracle 10g ?
Ошибка "/ вместо |" Есть: Сохраним и закроем файл. Затем импортирем ключ GPG: $ wget.
Процедура находится в пакете pac1 В этом пакете объявлен тип: type cur is ref cursor. В этом.
Мы создаем инструментальное средство разработки баз данных Oracle - 'Database Voyager'. Ввиду.
помогите пожалуйста! Мне надо написать курсовую по СУБД Oracle. Даже не знаю с чего начать.
Помогите новичку разобраться с инсталляцией. Есть оракл 9 на 3-х дисках. На первом диске -.
Помогите пожалуйста, не удается инсталлировать OracleClient 8 (8.1.7). Жмешь на Setup.exe и.
После патча Оракла 8.1.7.0.0 до 8.1.7.4.1 перестал выполняться export В чем проблема, помогите.
Подскажите, можно ли в уже имеющейся базе изменить настройки разделителя целой/дробной части.
Кто нибудь ставил mod_owa под Unix (Solaris)? Поделитесь опытом, плиз.
Мне кажется, что нужно использовать аналитические функции : create table T_CURRENCY ( CODE .
Здравствуйте, при запуске PLSQL Developer выдаёт следующую ошибку: ORA-12560: TNS:ошибка.
Наше приложение управляет таблицей, содержащей набор строк для каждого пользователя, который является результат вычислительно-интенсивного запроса. Хранение этого результата в таблице кажется хорошим способом ускорения дальнейших расчетов.
Структура этой таблицы в основном следующая:
Типичный пользователь нашего приложения будет иметь этот результат, рассчитанный 30 раз день, с набором результатов, состоящим из 1 единицы и 500 000 предметов. Типичный клиент объявит около 500 пользователей в производственной базе данных. Таким образом, эта таблица обычно состоит из 5 миллионов строк.
Типичный запрос, который мы используем для обновления этой таблицы:
После того, как вы столкнулись с проблемами производительности (часть DELETE займет много времени) мы решили иметь ГЛОБАЛЬНУЮ ВРЕМЕННУЮ ТАБЛИЦУ (при фиксации строк удаления), чтобы провести "delta" строк для подавления из таблицы и строк для вставки в нее:
Это немного улучшило производительность, но все же это неудовлетворительно. Так мы изучаем способы ускорения этого процесса, и вот проблемы, которые мы испытываем:
- Нам бы очень хотелось использовать разбиение на таблицы (разделение на user_login). Но разделение не всегда доступно (в наших тестовых базах данных мы попадали ORA-00439). Наши клиенты не могут позволить себе Oracle Enterprise Edition с платные дополнительные функции.
- Мы могли бы сделать таблицу per_user_result_set GLOBAL TEMPORARY, чтобы она изолирован, и мы можем его TRUNCATE . но наше приложение иногда теряет связь с Oracle из-за сетевых проблем, и автоматически повторно подключаться. К тому времени мы теряем содержание наших вычисление.
- Мы могли бы разбить эту таблицу на определенное количество ведер, сделать вид, что СОЮЗЫ ВСЕ все эти ведра и триггеры INSTEAD OF UPDATE и DELETE on это представление и повторить строки в соответствии с ORA_HASH(user_login) % num_buckets . Но мы боимся, что это может сделать операции SELECT намного медленнее. Это приведет к постоянному количеству таблиц с меньшими индексами затронутых в операциях DELETE или INSERT. Короче говоря, "столик для бедные".
- Мы попытались ALTER TABLE per_user_result_set NOLOGGING . Это не значительно улучшить ситуацию.
- Мы попытались CREATE TABLE . ORGANIZATION INDEX COMPRESS 1 . Эта скорость вещи в соотношении 1: 5.
- Мы попытались создать одну таблицу на user_login. Это то, что мы могли бы имеют разделение с использованием ряда разделов, равных числу различные user_logins и хорошо подобранная хеш-функция. Коэффициент производительности 1:10. Но я бы очень хотел избежать этого решения: нужно поддерживать огромное количество индексов, таблиц и представлений для каждого пользователя. Это было бы интересное повышение производительности для пользователей, но не для нас, сопровождающих системы.
- Поскольку пользователи работают одновременно, мы не можем создать новый стол и поменяйте его на старый.
Что вы могли бы предложить в дополнение к этим подходам?
Примечание. Наши клиенты используют базы данных Oracle с 9i до 11g, а выпуски XE - Корпоративное издание. Это широкий выбор версий, которые нам нужны совместим с.
Мы попытались создать одну таблицу на user_login. Это именно то, что мы может иметь разделение с использованием нескольких разделов, равных количество отдельных user_logins и хорошо подобранная хеш-функция. Коэффициент производительности - 1:10. Но я действительно хотел бы избежать этого Решение: необходимо поддерживать огромное количество индексов, таблиц, представлений, для каждого пользователя. Это было бы интересным пользователей, но не для нас, поддерживающих системы.
Можете ли вы затем создать хранимую процедуру для создания этой таблицы для каждого пользователя? Или, еще лучше, чтобы эта хранимая процедура выполняла наиболее подходящую вещь в зависимости от лицензирования поддержки Oracle?
Если все ваши пользователи были на 11g Enterprise Edition, я бы рекомендовал вам использовать встроенное кэширование набора результатов Oracle вместо того, чтобы пытаться перевернуть твой собственный. Но это не так, поэтому давайте двигаться дальше.
Другим привлекательным вариантом может быть использование коллекций PL/SQL, а не таблиц. Будучи в памяти, они быстрее восстанавливаются и требуют меньшего обслуживания. Они также поддерживаются во всех версиях, которые вам нужны. Тем не менее, они являются переменными сеанса, поэтому, если у вас есть много пользователей с большими наборами результатов, которые ставят под удар ваши распределения PGA. Кроме того, их данные будут потеряны при сбое сетевого соединения. Так что, вероятно, это не решение, которое вы ищете.
Ядро вашей проблемы - это утверждение:
Вы говорите, что не хотите иметь таблицу для пользователя, потому что
"[it] будет интересным для пользователей, но не для нас, поддерживающих системы",
Системы существуют в интересах наших пользователей. Удобство для нас великолепен, если оно помогает нам лучше обслуживать их. Но их потребность в хорошем рабочем опыте превосходит наши: они платят счета.
Но я сомневаюсь, действительно ли индивидуальные таблицы для каждого пользователя увеличивают рабочую нагрузку. Я предполагаю, что у каждого пользователя есть своя учетная запись и, следовательно, схема.
Я предлагаю вам придерживаться индексированных таблиц. Вам нужны только столбцы, которые находятся в первичном ключе, а сохранение отдельного индекса - лишние накладные расходы (как для вставки, так и для удаления). Большое преимущество наличия таблицы на пользователя заключается в том, что вы можете использовать TRUNCATE TABLE в процессе обновления, что намного быстрее, чем удаление.
Итак, ваша процедура обновления будет выглядеть так:
Обратите внимание, что вам больше не нужно включать столбец USER, поэтому в таблице yur будет только один столбец result_set_item_id (еще одно указание на пригодность IOT.
Сбор статистики таблицы не является обязательным, но это целесообразно. У вас есть широкая изменчивость в размерах наборов результатов, и вы не хотите использовать план выполнения, разработанный для 500000 строк, если таблица имеет только одну строку или наоборот.
Единственные накладные расходы - необходимость создания таблицы в пользовательской схеме. Но предположительно у вас уже есть определенная настройка для нового пользователя - создание учетной записи, предоставление привилегий и т.д., Поэтому это не должно быть большим лишением.
Я точно не являюсь пользователем базы данных, и большая часть моей работы с db была с MySQL, так что простите меня, если что-то в этом вопросе невероятно наивно.
Мне нужно удалить 5.5 миллионов строк из таблицы Oracle, содержащей около 100 миллионов строк. У меня есть все ID строк, которые мне нужно удалить во временной таблице. Если бы это было всего несколько тысяч строк, я бы сделал это:
Есть ли что-нибудь, о чем я должен знать, и/или делать по-другому, потому что это 5,5 миллионов строк? Я думал о выполнении цикла, что-то вроде этого:
Прежде всего - это то, что я думаю, что это - пакетная обработка составляет 200 000 штук за раз? Предполагая, что это так, я по-прежнему не уверен, что лучше создать 5.5 миллионов SQL-операторов и совершить в партиях 200 000, или иметь один оператор SQL и совершить все сразу.
Идеи? Лучшие практики?
РЕДАКТИРОВАТЬ. Я запустил первый вариант, один оператор удаления, и для разработки потребовалось всего 2 часа. Исходя из этого, он поставил в очередь на производство.
спросил(а) 2009-03-14T02:31:00+03:00 12 лет, 8 месяцев назадПервый подход лучше, потому что вы даете оптимизатору запросов четкое представление о том, что вы пытаетесь сделать, вместо того, чтобы скрывать его. Механизм базы данных может использовать другой подход к удалению 5,5 м (или 5,5% от таблицы), а не к удалению 200 тыс. (Или 0,2%).
Здесь также статья о массивном DELETE в Oracle, который вы, возможно, захотите прочитать.
ответил(а) 2009-03-14T02:56:00+03:00 12 лет, 8 месяцев назадСамый быстрый способ - создать новый с CREATE TABLE AS SELECT с помощью параметра NOLOGGING . Я имею в виду:
Конечно, вам нужно воссоздать ограничения без проверки, индексы с nologging, гранты. но очень быстро.
Если у вас возникли проблемы с производством, вы можете сделать следующее:
Вы заботитесь о:
-
Сохраненные процедуры могут быть недействительными, но они будут перекомпилированы во второй раз. Вы должны проверить его.
NOLOGGING означает, что генерируется минимальное. Если у вас есть роль DBA, запустите ALTER SYSTEM CHECKPOINT , чтобы не потерять данные, если произошел сбой экземпляра.
Для NOLOGGING табличное пространство должно быть также в NOLOGGING .
Другой вариант лучше, чем создание вкладок вставки:
UPDATE: Почему я могу гарантировать, что последний PLSQL-блок будет работать? Потому что я полагаю, что:
-
Никакая другая не использует эту временную таблицу по какой-либо причине (dba или задание, собирающее статистику, задачи dab, такие как перемещение, вставка записей и т.д.). Это может быть обеспечено, потому что это вспомогательная таблица только для этого.
Затем, с последним утверждением, запрос будет выполнен точно с тем же планом и будет возвращать строки с тем же порядком.
При выполнении массивных удалений в Oracle убедитесь, что у вас не закончилось UNDO SEGMENTS .
При выполнении DML , Oracle сначала записывает все изменения в журнал REDO (старые данные вместе с новыми данными).
Когда журнал REDO заполняется или происходит тайм-аут, Oracle выполняет log synchronization : он записывает данные new в файлы данных (в вашем случае маркирует блоки файлов данных как свободные) и записывает старые данные в табличное пространство UNDO (чтобы он оставался видимым для одновременных транзакций, пока вы не commit ваши изменения).
Когда вы совершаете свои изменения, пространство в сегментах UNDO , занятых транзакцией yuor, освобождается.
Это означает, что если вы удаляете строки 5M строк, вам нужно иметь место для all этих строк в сегментах UNDO , чтобы сначала их можно было перенести ( all at once ) и удаляется только после фиксации.
Это также означает, что параллельные запросы (если они есть) необходимо будет читать из REDO журналов или UNDO сегментов при выполнении сканирования таблицы. Это не самый быстрый способ доступа к данным.
Это также означает, что если оптимизатор выберет HASH JOIN для вашего запроса на удаление (что, скорее всего, это произойдет), а таблица temp не будет вписываться в HASH_AREA_SIZE (что, скорее всего, будет) то для запроса потребуется several сканирование по большой таблице, а некоторые части таблицы будут перенесены в REDO или UNDO .
Учитывая все сказанное выше, вы, вероятно, лучше удаляете данные в 200,000 кусках и фиксируете изменения между ними.
Таким образом, вы, во-первых, избавитесь от описанных выше проблем и, во-вторых, оптимизируете свой HASH_JOIN , поскольку у вас будет одинаковое количество чтений, но сами чтения станут более эффективными.
В вашем случае я попытался заставить оптимизатора использовать NESTED LOOPS , поскольку я ожидаю, что он будет быстрее в вашем случае.
Чтобы сделать это, убедитесь, что ваша временная таблица имеет первичный ключ на ID и переписывает ваш запрос следующим образом:
CBO: Оптимизация на основе затрат. Оптимизатор на основе затрат.
CBO оптимизаторСоздайте набор планов выполнения, которые можно использовать в соответствии с оператором SQL, оцените стоимость каждого плана выполнения и вызовите генератор планов (Генератор планов), чтобы сгенерировать план выполнения, сравните стоимость плана выполнения и, наконец, выберите наиболее дешевый план выполнения. ,
CBO состоит из следующих компонентов: Query Transformer, Estimator, Plan Generator
В Oracle 10g есть 2 необязательных режима работы для CBO:
(1) FIRST_ROWS(n)
(2) ALL_ROWS-значение по умолчанию в 10g
Просмотр режима CBO:
Три способа изменить модель CBO:
(1) Уровень сессий
(2) Системный уровень
Oracle предоставляет возможность использовать подсказку для установки типа оптимизатора в SQL на CBO или RBO.
(3) Уровень выписки
использование Hint(/*+ . */) Установить
Оптимизатор на основе затрат (CBO) очень умный, в большинстве случаев он выберет правильный оптимизатор, уменьшая нагрузку на администраторов баз данных. Но иногда он также является умным и ошибочным и выбирает очень плохой план выполнения, что делает выполнение определенного оператора чрезвычайно медленным.
На этом этапе администратору БД необходимо вмешательство человека, чтобы сказать оптимизатору использовать указанный путь доступа или тип соединения для генерации плана выполнения, чтобы оператор выполнялся эффективно. Например, если мы считаем, что более полное сканирование таблицы более эффективно, чем сканирование индекса для определенного оператора, то мы можем поручить оптимизатору использовать полное сканирование таблицы.
В Oracle цель оптимизации оптимизатора вмешательства достигается путем добавления подсказки (подсказки) к выражению.
Oracle Hint - это механизм, который позволяет оптимизатору сгенерировать план выполнения так, как мы его сообщаем.
Мы можем использовать Oracle Hint для достижения:
- 1) Тип используемого оптимизатора
- 2) Целью оптимизации оптимизатора на основе затрат является all_rows или first_rows.
- 3) Независимо от того, является ли путь доступа к таблице полным сканированием таблицы, индексным сканированием или rowid напрямую.
- 4) Тип соединения между таблицами
- 5) Порядок соединения между таблицами
- 6) Степень параллелизма высказываний
При использовании подсказки следует отметить следующее: Не все моменты подсказка работает.
Причины сбоя HINT следующие:
Если CBO считает, что использование подсказки приведет к неверным результатам, подсказка будет проигнорирована.
Если запись в индексе несовместима с записью таблицы из-за нулевого значения, результат неверен, а подсказка игнорируется.
Если в таблице указан псевдоним, псевдоним также должен использоваться в подсказке, иначе подсказка также будет игнорироваться.
- 1
- 2
- 3
- 4
- 5
- 1) DELETE, INSERT, SELECT и UPDATE - это ключевые слова, которые идентифицируют начало блока оператора, и комментарии, содержащие подсказки, могут появляться только после этих ключевых слов, в противном случае подсказка недействительна.
- 2) Знак «+» означает, что примечание является подсказкой, а знак плюс должен следовать сразу за «/ *» без пробелов.
- 3) Подсказка - это одна из конкретных подсказок, описанных ниже. Если имеется несколько подсказок, каждая подсказка должна быть разделена одним или несколькими пробелами.
- 4) текст другой пояснительный текст, который объясняет подсказку
Если вы не укажете Hint правильно, Oracle проигнорирует Hint и не выдаст никаких ошибок.
Другое: только один / после каждой команды SELECT / INSERT / UPDATE / DELETE + /, но может быть несколько приглашений, разделенных запятыми или пробелами.
Такие как:/ *+ ordered index() use_nl() */
Оптимизатор режима Подсказка
Путь доступа Подсказка
Таблица подключения порядок подсказка
Метод ассоциации таблиц Подсказка
Параллельное исполнение подсказки
Подсказка преобразования запроса
Другое Подсказка
В процессе оптимизации операторов SQL мы часто используем подсказки, а теперь обобщаем общее использование Oracle HINT в процессе оптимизации SQL:
1. /*+ALL_ROWS*/
Он показывает, что для блока операторов выбран метод оптимизации на основе затрат, получена наилучшая пропускная способность и минимизировано потребление ресурсов.
Когда режим CBO установлен на ALL_ROWS, Oracle выполнит SQL с максимальной скоростью и вернет все наборы результатов. Разница между ним и FIRST_ROWS (n) заключается в том, что ALL_ROWS подчеркивает, что SQL будет выполняться с самой быстрой скоростью, и будет Все результирующие наборы возвращаются, и FIRST_ROWS (n) фокусируется на времени выполнения возврата первых n записей.
2. /*+FIRST_ROWS*/
Он показывает, что для блока операторов выбран метод оптимизации на основе затрат, и наилучшее время отклика достигается для минимизации потребления ресурсов.
Если для режима оптимизации CBO задано значение FIRST_ROWS (n), при выполнении SQL Oracle будет отдавать приоритет первым n записям в наборе результатов и отсылать самые быстрые, тогда как другие результаты не нужно возвращать одновременно.
В примере подкачки каждый раз, когда из набора результатов берутся 10 записей, записи сортируются в соответствии с полем x.
Примечание: поле x, используемое для сортировки, должно быть проиндексировано, иначе CBO будет игнорировать FIRST_ROWS (n) и использовать ALL_ROWS.
3. /*+CHOOSE*/
Указывает, что если в словаре данных есть статистическая информация о таблице доступа, она будет основана на методе оптимизации служебных данных и обеспечит наилучшую пропускную способность.
Покажите, что если в словаре данных отсутствует статистическая информация о таблице доступа, она будет основана на методе оптимизации издержек правила;
4. /*+RULE*/
Это указывает на то, что метод оптимизации на основе правил выбран для блока предложения.
Например:
5. /*+FULL(TABLE)*/
Указывает, что для таблицы выбран метод глобального сканирования.
Подсказка сообщает оптимизатору доступ к данным через полное сканирование указанной таблицы.
Например:
Следует отметить, что если таблица имеет псевдоним, псевдоним также следует использовать в подсказке
6. /*+ROWID(TABLE)*/
Подсказка ясно указывает, что указанная таблица доступна в соответствии с ROWID.
Например:
7. /*+CLUSTER(TABLE)*/
Подсказка ясно указывает, что метод доступа для выбора сканирования кластера для указанной таблицы действителен только для объекта кластера.
Например:
8. /*+INDEX(TABLE INDEX_NAME)*/
Указывает метод сканирования для выбора индексов в таблице.
Индексная подсказка сообщает оптимизатору доступ к данным путем индексации указанной таблицы. При доступе к индексу будет получен неполный набор результатов, оптимизатор проигнорирует этот совет.
Индекс используется только тогда, когда в предикате есть поле индекса.
9. /*+INDEX_ASC(TABLE INDEX_NAME)*/
Указывает, что метод сканирования для выбора индекса в порядке возрастания на таблице.
Например:
10. /*+INDEX_COMBINE*/
Выберите путь доступа к битовой карте для указанной таблицы. Если индекс в качестве параметра не указан в INDEX_COMBINE, будет выбран метод логической комбинации индекса битовой карты.
Например:
11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
В приглашении четко указано, что оптимизатор использует индекс в качестве пути доступа.
Например:
12. /*+INDEX_DESC(TABLE INDEX_NAME)*/
Показывает метод сканирования в порядке убывания выбора индекса в таблице.
Например:
13. /*+INDEX_FFS(TABLE INDEX_NAME)*/
Выполните быстрое полное сканирование индекса по указанной таблице вместо полного сканирования таблицы.
Например:
14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2. */
Предложите четко выбрать план выполнения и объединить несколько сканирований индекса по одной колонке.
Например:
15. /*+USE_CONCAT*/
Преобразуйте условие OR после WHERE в запросе в объединенный запрос UNION ALL.
Например:
16. /*+NO_EXPAND*/
Для операторов запроса OR или IN-LIST после WHERE NO_EXPAND предотвратит его расширение на основе оптимизатора.
Например:
17. /*+NOWRITE*/
Операции перезаписи запросов в блоках запросов запрещены.
18. /*+REWRITE*/
Вы можете принять вид в качестве параметра.
19. /*+MERGE(TABLE)*/
Возможность объединить различные запросы представления соответственно.
Например:
20. /*+NO_MERGE(TABLE)*/
Представления, которые можно объединить, больше не объединяются.
Например:
21. /*+ORDERED*/
В соответствии с порядком, в котором таблицы отображаются в FROM, ORDERED заставляет ORACLE соединять их в этом порядке.
Подсказка указывает Oracle выбирать таблицу дисков в порядке, следующем за таблицей, следующей за From. Oracle рекомендует использовать Leading при выборе таблицы дисков, что является более гибким.
22. /*+USE_NL(TABLE)*/
Подключите указанную таблицу к вложенному связанному источнику строк и используйте указанную таблицу в качестве внутренней таблицы.
В запросе на сопоставление с несколькими таблицами укажите использование гнездовых циклов для сопоставления с несколькими таблицами.
Например:
23. /*+USE_MERGE(TABLE)*/
Соедините указанную таблицу с другими источниками строк через соединение сортировки слиянием.
В запросе ассоциации с несколькими таблицами укажите использование объединения слиянием для ассоциации с несколькими таблицами.
Например:
24. /*+USE_HASH(TABLE)*/
Соедините указанную таблицу с другими источниками строк с помощью хеш-соединения.
В запросе на сопоставление с несколькими таблицами укажите использование хеш-соединения для выполнения сопоставления с несколькими таблицами.
Например:
25. / +DRIVING_SITE(TABLE) /
Принудительно задать таблицу с местоположением, отличным от того, которое выбрано ORACLE для выполнения запроса.
Например:
26. / +LEADING(TABLE) /
Используйте указанную таблицу в качестве первой таблицы в порядке подключения.
В запросе, включающем несколько таблиц, подсказка указывает, какая таблица используется в качестве таблицы управления, и сообщает оптимизатору, какой таблице следует сначала получить доступ к данным.
27. / +CACHE(TABLE) /
В операции полного сканирования таблицы, если вы используете это приглашение, Oracle поместит отсканированные блоки данных в LRU (наименее недавно использованный: недавно использованный список, это алгоритм для Oracle для определения активности блоков данных в памяти) Наиболее используемый конец (самый активный конец блока данных), так что блок данных может находиться в памяти в течение более длительного времени.
Если имеется небольшая таблица, к которой часто обращаются, этот параметр повысит производительность запроса. В то же время CACHE также является атрибутом таблицы. Если установлен атрибут кэширования таблицы, он имеет тот же эффект, что и подсказка. После полного сканирования таблицы блок данных Оставайтесь в самом активном конце списка LRU.
28. /*+NOCACHE(TABLE)*/
29. /*+APPEND*/
Вставка непосредственно в конец таблицы может увеличить скорость.
Предложите базе данных загрузить данные в базу данных путем прямой загрузки.
Этот намек используется очень часто. особенно вВставьте большое количество данных, Как правило, используйте этот совет.
30. /*+NOAPPEND*/
Запустите обычные операции вставки, остановив параллельный режим в течение срока действия оператора вставки.
31. NO_INDEX: указать, какие индексы не используются
/ + NO_INDEX ( table [index [index]…] ) /
Параллельное выполнение связанной подсказки
parallel
Укажите параллелизм выполнения в SQL, это значение переопределит его собственный параллелизм
Что касается параллельности таблицы, мы можем указать ее при создании таблицы, например:
Читайте также: