
Denis
19.02.2017
19:19:57
Мы имеем 100к и 2М строк сейчас

Darafei
19.02.2017
19:19:58
и если оно в work_mem не поместится, он пойдёт сразу в диск

Denis
19.02.2017
19:20:38
Вроде выборка по индексу от воркмем не зависит?

Darafei
19.02.2017
19:22:45
тебе провести эксперимент - полторы команды набрать

Google

Darafei
19.02.2017
19:24:17
вдруг моя интуиция меня подводит и я всем тут нагло вру, а дело на самом деле в const int knn_sort_limit = 630;

Denis
19.02.2017
19:26:11
Поскольку SET work_mem = '40MB'; ни на что не повлиял, дело видимо именно в нем
Спасибо, я получил ответ

Darafei
19.02.2017
19:26:27
набрал в консоли set work_mem to off;
— видимо, завтра на работу идти ещё рано

Denis
19.02.2017
19:29:21
const int knn_sort_limit = 630; - а где она определена?

Darafei
19.02.2017
19:29:24

Denis
19.02.2017
19:32:02
Теперь работает кажется с любым LIMIT
При больших значениях правда оч. медленно, но но по индексам) В принципе теперь понятно почему 630 по умолчанию

Darafei
19.02.2017
19:34:37
какое "630" по умолчанию?
нет умолчаний
есть генетический планировщик

Denis
19.02.2017
19:34:48
const int knn_sort_limit = 630;

Google

Артур
19.02.2017
19:35:18

Darafei
19.02.2017
19:36:17

Denis
19.02.2017
19:37:38
Ну я же нуб, мне простительно

Darafei
19.02.2017
19:40:24
в постгресе cost-based optimizer. у любого узла в плане есть кост. план меняется, если кост какого-нибудь узла поменялся, или план перестал влезать в память

Denis
19.02.2017
19:41:58
По опции enable_sort доки не нашлось. Я правильно понял что оно просто запрещает сортировку на диске/в памяти?
И поэтому слон не может отказаться от сортировки не по индексам, даже если считает это правильным

Darafei
19.02.2017
19:43:09
это отладочная опция, её нельзя в продакшен
она для проверки, существует такой план или нет
если нет, он всё равно будет использовать сорт, просто у него кост будет многомиллиардным - и это сразу вылезет в explain

Артур
19.02.2017
19:44:35

Darafei
19.02.2017
19:45:19
@Archeebald индекс завёл?

Артур
19.02.2017
19:45:43
какой? в принципе во второй таблице индекс итак есть

Darafei
19.02.2017
19:46:04
мне пока что кажется, что индекс по btree (sub) where name='address' по второй таблице сделал бы из мержа seq scan на апдейт + index scan, и это было бы, возможно, быстрее мержа

Артур
19.02.2017
19:46:54
ааа.. я это вообще не понял ? Поэтому решил по самому простому пути пойти :)
Сейчас в мануалы окунусь

Darafei
19.02.2017
19:47:16

Denis
19.02.2017
19:48:00
cost 4 винт ssd

Darafei
19.02.2017
19:48:12
объявлен режим повышенной опасности, два параллельно отлаживающихся запроса!

Denis
19.02.2017
19:48:56
Это повысит предпочтительность работы по индексам вместо сек-скана?

Google

Darafei
19.02.2017
19:49:31
да, он считает, что лучше прочитать в 4 раза больше данных, но последовательно, чем рандомно
оптимизация под блинчатые винчестеры

Evgeniy
19.02.2017
19:50:01
завтра масленица)
всем сексканов

Darafei
19.02.2017
19:50:33

Denis
19.02.2017
19:50:52
Теперь у меня предел по лимит < 500
Интересная магия творится

Darafei
19.02.2017
19:52:16
@den1970 ...ничего, потом ты cte уберёшь и окажется, что твой запрос и дальше оптимизировать можно :)

Denis
19.02.2017
19:52:45
Да он не нужен уже сейчас
Но на план уже не влияет

Артур
19.02.2017
19:52:57
index по where name ='address' будет одним из множества. Там полей 15 перевозить буду. Скорость увеличилась в 2 раза. Уже хорошо. Всем, а особенно @Komzpa спасибо за этот забег вместе со мной

Nikita
19.02.2017
19:53:43
Продолжаю делать тест, посмотрите плиз что он от меня хочет
Select
name
FROM customer1
WHERE EXTRACT(ISODOW FROM birthday) IN (1,5)
AND name ILIKE 'b%'
UNION ALL
SELECT
name
FROM employee
WHERE EXTRACT(ISODOW FROM birthday) IN (1,5)
AND name ILIKE 'b%'
Вопрос по этому запросу с целью сделать быстрее
what do you think about following part in where?
name between "b" and "b" and name between "B" and "B"
Are there some advantages? Are there some disadvantages? Could you do some execution time estimates? Could you compare it with your solution?

Darafei
19.02.2017
19:54:51

Denis
19.02.2017
19:55:37
Дарафей, все привыкли что ты экстрасенс)

Darafei
19.02.2017
19:55:38

Denis
19.02.2017
19:56:23
Да не, я ее как нафигачил тестовыми данными, так она и лежит)
Запрос пока пишется, ему далеко до прода

Lev
19.02.2017
19:56:42
и сказал в чём разница ILIKE и between 'b' and 'b'

Denis
19.02.2017
19:57:12
И анализируется на предмет его возможностей в плане объема перевариваемых данных

Google

Darafei
19.02.2017
19:59:05
или задаче - юзеров?

Denis
19.02.2017
19:59:46
А ты проницателен

Darafei
19.02.2017
20:01:13
это чем-то напоминает виртуальное взятие флага в гонках по форме

Denis
19.02.2017
20:03:04

Nikita
19.02.2017
20:03:15
Write SQL query to create one list of people from two independent tables - CUSTOMER and EMPLOYEE, who have birthday on Monday or Friday and their name begins on "b", both small and capital.
Please take you time and write best query (shortest execution time on large datasets) you can, do not use subqueries. Describe also indexes needed to achieve highest performance.
Вот само задание

Denis
19.02.2017
20:03:55
Тестовое задание что ли?

Nikita
19.02.2017
20:03:59
Я по разному сделал, сделал тест на 1 млн
Угу

Darafei
19.02.2017
20:04:13
ой
а зарплатой поделишься? :)

Denis
19.02.2017
20:04:25
Да делай функциональный индекс по выражению name ILIKE 'b%'

Nikita
19.02.2017
20:05:13
Да я сделать не прошу, может просто кто-то подскажет в какую сторону смотреть и почему так

Darafei
19.02.2017
20:05:25
это точно не будет самым быстрым

Nikita
19.02.2017
20:05:27
Без индексов

Darafei
19.02.2017
20:06:33
проще всего в постгресовый код посмотреть и прикинуть сложность каждой функции
иногда там находятся неожиданные костыли под редкие кейсы

Denis
19.02.2017
20:07:12

Google

Nikita
19.02.2017
20:07:31
Пока что у меня на первом месте идет left(name,1) in ('b','B') это же лучше like?

Артур
19.02.2017
20:07:39
@Komzpa для информации. Не знаю почему, но план показывал 25 минут, а фактически за 2-5 минут отрабатывает.

Darafei
19.02.2017
20:07:49
потому что есть решения шустрее, смотри соседний тред с Артуром для намёков :)
а можно мне тоже такое задание? :)
а то я там пару финтов знаю, как тексты ускорять
(я просто читал ченжлоги постгреса)

Nikita
19.02.2017
20:21:23
Я же сбросил задание

Darafei
19.02.2017
20:22:13
но ты не сбросил, откуда ты его взял :)

Nikita
19.02.2017
20:28:01
Да я общаюсь с рекрутером, работа в офисе в минске. Он на емаил скидывает дополнения.

Evgeniy
19.02.2017
21:08:39
>но план показывал 25 минут
нет. план показывает в попугаях
а неужели так сложно сделать составной индекс по первой букве и возрасту и написать запрос, который этот индекс эксплуатирует?
ну потом надо непременно послать нахуй мудака, который придирается

Nikita
19.02.2017
21:10:47
Блин, сказал без индексов

Evgeniy
19.02.2017
21:10:48
иначе не стоит оно страданий недельных
БЕЗ ИНДЕКСОВ!?
так шли нахуй сразу
сиди запросы ему пиши для nosql

Nikita
19.02.2017
21:11:43
Я так понял надо обьяснить физически принцип работы like и between и почему они лучше хуже
Евгений, ты не первый кто мне советует так сделать)

Evgeniy
19.02.2017
21:13:02
я ничего не советовал про лайк