Это быстрее для запросов, чтобы потерпеть неудачу на уникальном или запросе сначала? - PullRequest
0 голосов
/ 08 сентября 2011

У меня очень простой веб-сканер. Таблица базы данных, в которой хранятся найденные ссылки, имеет уникальный индекс в поле URL.

Логика, которая у меня есть, заключается в том, что для каждой ссылки, найденной на странице, приложение будет запрашивать таблицы ссылок, чтобы узнать, существует ли эта ссылка уже. Если он еще не существует, он вставит его.

Пытаясь получить максимальную производительность для скрипта, можно ли было бы просто пропустить начальный запрос, который проверяет, существует ли ссылка, поскольку, если ссылка пытается вставить ее, она все равно потерпит неудачу?

Из-за этого будет больше попыток вставки, но это устранит необходимость в запросе полного выбора для каждой найденной ссылки.

1 Ответ

1 голос
/ 08 сентября 2011

Я полагаю, что запуск первого выбора будет быстрее, но тестирование будет более надежным, чем интуиция.

Результаты зависят от относительной скорости выбора, успешной вставки и неудачной вставки. Вполне возможно, что создание ошибки для неудачной вставки занимает гораздо больше времени, чем дополнительный выбор, но если это происходит достаточно редко, это все же меньше, чем дополнительный выбор.

Например, допустим, что выбор занимает 1 мс, успешная вставка - 20 мс, а неудачная вставка - 10 мс. (все номера полностью придуманы). Если из каждых 100 элементов 99 будет успешным, то 100 выбор / вставка займет 2080 мс, а вставка / сбой займет всего 1990 мс. С другой стороны, только 10 из 100 вставок будут успешными, тогда 100 выбор / вставка займет 300 мс, а 100 вставка / сбой займет 1100 мс.

Краткий ответ: время.

...