powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Быстрое сравнение строк с учётом null
7 сообщений из 7, страница 1 из 1
Быстрое сравнение строк с учётом null
    #38587792
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Подскажите самый быстрый способ сравнение строк с учётом null.
Пока испробовал 3 метода:
1. a=b or (a is null and b is null)
2. a=b or (coalesce(a,b) is null)
3. a IS NOT DISTINCT FROM b

Самый быстрый в моём случае первый.
Может кто предложит более быстрый вариант?
...
Рейтинг: 0 / 0
Быстрое сравнение строк с учётом null
    #38587931
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProДобрый день.
Подскажите самый быстрый способ сравнение строк с учётом null.
Пока испробовал 3 метода:
1. a=b or (a is null and b is null)
2. a=b or (coalesce(a,b) is null)
3. a IS NOT DISTINCT FROM b

Самый быстрый в моём случае первый.
Может кто предложит более быстрый вариант?

теоретически последний должен быть самым быстрым...
а как вы проверяли?
...
Рейтинг: 0 / 0
Быстрое сравнение строк с учётом null
    #38587943
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Идёт join к n таблицам, n-1 - это справочники, и ещё одна таблица фактов.
На одной таблице выглядит так:

Код: plsql
1.
2.
3.
insert into fact (dim1, value)
  select key, value from  dim1, temp 
  where dim1.name=temp.dim1 



Но это простой пример, на практике идёт запрос к 3 до 10 таблицам.
Структура таблиц простая:

dim1
key(integer),name (text)
temp
dim1(itneger),value(double)


Вот на таком запросе примерно и проверял
...
Рейтинг: 0 / 0
Быстрое сравнение строк с учётом null
    #38588972
xPro,

4. coalesce(a, '') = coalesce(b, '')

при необходимости создать функциональный индекс
...
Рейтинг: 0 / 0
Быстрое сравнение строк с учётом null
    #38589619
GeniyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто Нафаня,
ну если для вас null и строка нулевой длинны это одно и тоже, то можно и так.
...
Рейтинг: 0 / 0
Быстрое сравнение строк с учётом null
    #38589636
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProДобрый день.
Подскажите самый быстрый способ сравнение строк с учётом null.
Пока испробовал 3 метода:
1. a=b or (a is null and b is null)
2. a=b or (coalesce(a,b) is null)
3. a IS NOT DISTINCT FROM b

Самый быстрый в моём случае первый.
Может кто предложит более быстрый вариант?
самый быстрый в вашем случае 3-й.

Код: sql
1.
2.
3.
4.
5.
6.
7.
WITH q(f) AS (SELECT * FROM generate_series(1,10000) AS g )
,a AS (SELECT case WHEN f % 50 = 0 THEN null else 50 end AS f FROM q)
,b AS (SELECT case WHEN f % 75 = 0 THEN null else 75 end AS f FROM q)
--SELECT count(*) FROM a,b WHERE  a.f=b.f or (a.f is null and b.f is null);
--"Total runtime: 28363.282 ms"
SELECT count(*) FROM a,b WHERE a.f IS NOT DISTINCT FROM b.f;
--"Total runtime: 24951.305 ms"




а вот в случае индексов, как сейчас помню, были проблемы с 3-м (индекс не пользовался), приходилось опускаться до 1.
...
Рейтинг: 0 / 0
Быстрое сравнение строк с учётом null
    #38589726
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю насколько в тему, но касательно IS NOT DISTINCT FROM есть в документации вот такая строчка:
At present, IS NOT DISTINCT FROM is handled much less efficiently than =, so don't do this unless you must.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Быстрое сравнение строк с учётом null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]