(Использование Oracle) У меня есть таблица с одним столбцом (myCol), который является первичным ключом.PLSQL - Самый быстрый способ проверить наличие дубликатов перед вставкой
Выполнение вставки, быстрее ли проверять с помощью инструкции выбора перед выполнением вставки или просто записать вставку и разрешить обработку ошибок?
Так будет ли это быстрее?
BEGIN
SELECT count(*) INTO v_count FROM myTbl WHERE myCol = v_newVal;
IF v_count = 0 THEN
INSERT INTO myTbl (myCol) VALUES (v_newVal);
END IF;
END;
или этот?
BEGIN
INSERT INTO myTbl (myCol) VALUES (v_newVal);
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
null;
END;
Спасибо!
Ссылка, которую вы указали, указывает на то, что использование подсчета является наилучшим методом ... – mang
хорошо, я не согласен с этой частью, но он был предназначен для отображения подсказки подсказки запроса, это все ... когда таблицы получают большой счет, могут стать дорогими , Если ваш стол не большой, маршрут подсчета является самым простым. – markg
Счет может быть дорогостоящим, и он может разрушить кеш других будущих выборов, поскольку множество записей будет проанализировано и прочитано. Начать без count() только усложнить задачу, если у вас есть проблема с производительностью. Наконец, даже если вы делаете count(), вам по-прежнему нужна обработка исключений из-за параллелизма. – odedsh