@pgsql

Страница 346 из 1062
Артур
28.05.2017
15:21:18
на связанные поля отдельные индексы нужно делать?

Или это по умолчанию индекс?

Darafei
28.05.2017
15:21:49
это можно выяснить прямо в базе, посмотрев, есть ли на них индексы

постгрес невидимых индексов сам не строит

Google
Артур
28.05.2017
15:22:23
Ну то есть получается что связи таблиц не равно индекс

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

Darafei
28.05.2017
15:23:20
Since a DELETE of a row from the referenced table or an UPDATE of a referenced column will require a scan of the referencing table for rows matching the old value, it is often a good idea to index the referencing columns. Because this is not always needed, and there are many choices available on how to index, declaration of a foreign key constraint does not automatically create an index on the referencing columns.

да

Артур
28.05.2017
15:24:39
верно лши я понимаю, что при связи таблиц мне сразу надо и индекс создавать, а не только перед удалением

Чтобы и добавление/обновление записи было быстрее

нет, тупость ляпнул.

По идее тогда родительские таблицы удут по уникальному индексу искаться

عاصم بن حارث
28.05.2017
15:26:13
Индексы - наше все! А правильно подобранные и созданные индексы - теплый сон разраба )))

Артур
28.05.2017
15:28:37
Еще вопрос, удаление в принципе будет редко

1 сек опишу

Правильно ли я сделаю? если будет: DO создание временных индексов по связанным таблицам удаление записей END

Darafei
28.05.2017
15:30:09
Индексы - наше все! А правильно подобранные и созданные индексы - теплый сон разраба )))
индексы - это хак. ISO SQL их вообще не упоминает. по хорошему их быть не должно, а система должна сама всё прекрасно понимать. :P

Google
Darafei
28.05.2017
15:31:57
Правильно ли я сделаю? если будет: DO создание временных индексов по связанным таблицам удаление записей END
оно будет работать, но ничем не будет отличаться от create / delete / drop, кроме времени жизни транзакции, которое лучше всегда держать поменьше

Darafei
28.05.2017
15:34:06
Ты вот как равному сейчас объяснил. А я значительно ниже рангом :)
все локи, что ты соберёшь между BEGIN и COMMIT, будут отпущены только по COMMIT. а это иногда может неожиданно тормознуть намертво всё вокруг :)

عاصم بن حارث
28.05.2017
15:34:12
индексы - это хак. ISO SQL их вообще не упоминает. по хорошему их быть не должно, а система должна сама всё прекрасно понимать. :P
Окружающая среда говорит нам о обратном и ИСО плавно пролетает мимо, как бы нам не хотелось иного.

Darafei
28.05.2017
15:36:22
Окружающая среда говорит нам о обратном и ИСО плавно пролетает мимо, как бы нам не хотелось иного.
почему планировщик запроса, увидев seq scan и = в запросе, не может сам создать btree индекс, если это prepared statement, например? :)

да и без prepared

عاصم بن حارث
28.05.2017
15:37:29
почему планировщик запроса, увидев seq scan и = в запросе, не может сам создать btree индекс, если это prepared statement, например? :)
Коллега, это не ко мне вопрос. Нечто подобное и более того, я приодически задаю сам себе, уверяю вас. )))

Но, читаешь всякие статьи о тюнинге, оптимизации и всюду лейб мотив,- "правильные идексы" и .т.д. При этом, речь о "основных реализациях серверов БД": оракл, сайбэс, постгре, мускуль )))

Darafei
28.05.2017
15:41:54
все привыкли создавать индексы, и думают, что так и надо

عاصم بن حارث
28.05.2017
15:42:03
Вот и возникает очевидный вопрос: "Сговорились?" Не? Или все-же ищем ответ глубже...

Darafei
28.05.2017
15:42:09
чем это лучше хинтов планировщика?

عاصم بن حارث
28.05.2017
15:43:05
Не готов дать однозначный ответ.

Артур
28.05.2017
15:49:40






Но всеравно долго

Darafei
28.05.2017
15:50:40
а второй раз?

Артур
28.05.2017
15:51:21


Darafei
28.05.2017
15:51:44
ну, вычитать-то всё с винчестера разок надо

Google
Артур
28.05.2017
15:52:49
Еще вопрос



По идее должно быть 7900

Darafei
28.05.2017
15:53:32
Seq Scan вычитал всю таблицу и почти всю её выкинул

Артур
28.05.2017
15:54:01


Darafei
28.05.2017
15:55:10
да, у тебя 402680 строк в таблице с locality != 1 и 7797 c locality = 1

Артур
28.05.2017
15:56:20
А, ну понял. Короче он 402680 исключил из удаления

Спасибо большое. Теперь работает как субд, а не как XML файл :)

В плане скорости

@Komzpa напомни пожалуйста правило составления навзания индекса

idx_{table}_{index fields} ?

Darafei
28.05.2017
18:25:28
idx в конце

Артур
28.05.2017
18:28:26
ясно

спасибо

عاصم بن حارث
28.05.2017
18:34:04
https://habrahabr.ru/post/203386/ https://www.postgresql.org/docs/current/static/sql-createindex.html

Darafei
28.05.2017
19:11:09
https://habrahabr.ru/post/203386/ https://www.postgresql.org/docs/current/static/sql-createindex.html
https://www.depesz.com/2013/04/16/explaining-the-unexplainable/ https://www.depesz.com/2013/04/27/explaining-the-unexplainable-part-2/

عاصم بن حارث
28.05.2017
19:12:45
??

Denis
29.05.2017
02:05:08
подскажите, как правильно удалять индекс в нагруженной запросами таблице? по идее должен помочь drop index concurrently, но он вешает ShareUpdateExclusiveLock, что тоже крайне неприятно.

то есть я правильно понимаю, что пока висит drop index concurrently, автовакуум не придет в таблицу? и кстати, как оно вообще работает под капотом? оно может долго висеть и мне интересно, какие условия необходимы, чтобы оно выполнилось

все, я страшно тупил - у коллеги висел AccessShare лок на таблицу, поэтому drop concurrently и не выполнялся. всем спасибо

Google
Артур
29.05.2017
04:50:52
Вопрос как натуральную сортировку делать?

В ответах везде regexp_replace используются. М.б. есть проще решение?

Igor
29.05.2017
04:54:03
https://pgxn.org/dist/pg_natural_sort_order/ разве проще?)

Артур
29.05.2017
04:57:04
С кирилицей рабоатет?

Igor
29.05.2017
04:59:46
судя по исходникам, должен

Admin
ERROR: S client not available

Артур
29.05.2017
05:16:37
она для 9,5

Говорит следующее: Server is version 9.6, library is version 9.5.

http://www.postgresql-archive.org/Natural-sort-order-td5082405.html Нечто страшное есть, но не производиельное судя по общению

Больше ничего не нашел

Нужно то как: 2 2А 3 4 .. 22

Вот такая конструкция title::bytea более менее нормально отдает.

Но опять же буквы ниже цифр.

Ну и 12 выше 2 почемуто



Darafei
29.05.2017
05:29:51
оно их по байтам сортирует. откуда там быть natural?

Артур
29.05.2017
05:31:05
Это я понял, но почему 12 выше 2

Вот это озадачило

в числе 12 байт меньше чем в 2

?

Google
Igor
29.05.2017
05:32:50
ээ.. title - это строка

Leonid
29.05.2017
05:33:12
сорян

Igor
29.05.2017
05:33:12
байтик, отвечающий за символ "1", находится раньше, чем байтик, отвечающий за символ "2"

Артур
29.05.2017
05:34:50
?

спасибо

Konstantin
29.05.2017
07:55:02
всем привет, кто-нибудь может подсказать - в запросе вывожу несколько полей, в том числе 2 поля count(). таблицы через left join. Проблема: count выводит неправильно, он их перемножает между собой и выводит результат в оба поля. запрос : select inc.incident_time::date as data, inc.incident_time::time as time, inc.id as incidentId, emp.id as employeeId, emp.login as login, emp.description as description, COALESCE(inc.hurt_number, 0) as countHurt, count(work.incident) as countWork, count(service.incident) as countService, string_agg(distinct gos.short_title, '; ') as service from incident as inc left join employee as emp on inc.employee = emp.id left join incident_work_off as work on work.incident = inc.id left join incident_gos_service as service on inc.id=service.incident left join gos_service as gos on service.gos_service = gos.id where incident_time between '2017-04-10 00:00:00' and '2017-05-25 23:59:59.999' group by incidentId, employeeId order by incidentId asc

count work и countService перемножаются между собой и выводится результат в оба поля

по отдельности, если убрать эти поля и join-ы на них - все норм

Darafei
29.05.2017
08:00:44
Count считает в итоговом результате

Считай до join-a, например

и джойни два подзапроса

Konstantin
29.05.2017
08:12:21
Lev
29.05.2017
08:14:33
А ожидается, что под одним select'ом 2 вызова функции count без distinct вернут разный результат?

Darafei
29.05.2017
08:15:25
если в полях есть null'ы, то вернут. но тут явно не тот случай.

Konstantin
29.05.2017
08:20:14
А ожидается, что под одним select'ом 2 вызова функции count без distinct вернут разный результат?
по сути countService выводит количество значений из service, и когда происходит вывод неправильного результата, в service тоже идет куча одинаковых данных.

Страница 346 из 1062