У меня есть два типа запросов, которые я часто выполняю для двух больших наборов данных. Они бегут намного медленнее, чем я ожидал.
Первый тип - это последовательное сканирование, обновляющее все записи:
Update rcra_sites Set street = regexp_replace(street,'/','','i')
rcra_sites имеет 700 000 записей. Это займет 22 минуты от pgAdmin! Я написал функцию vb.net, которая просматривает каждую запись и отправляет запрос на обновление для каждой записи (да, 700 000 запросов на обновление!), И он выполняется менее чем в два раза. Хммм ....
Второй тип - это простое обновление с отношением и последующим сканированием:
Update rcra_sites as sites
Set violations='No'
From narcra_monitoring as v
Where sites.agencyid=v.agencyid and v.found_violation_flag='N'
narcra_monitoring имеет 1 700 000 записей. Это займет 8 минут. Планировщик запросов отказывается использовать мои индексы. Запрос выполняется намного быстрее, если я начну с set enable_seqscan = false; . Я бы предпочел, чтобы планировщик запросов выполнял свою работу.
У меня есть соответствующие индексы, я пылесосил и анализировал. Я оптимизировал свои shared_buffers и ffective_cache_size , лучше всего я знаю, чтобы использовать больше памяти, поскольку у меня есть 4 ГБ. Мое оборудование чертовски хорошо. Я использую v8.4 в Windows 7.
Является ли PostgreSQL медленным? Или я все еще что-то упускаю?