@dba_ru

Страница 504 из 718
Igor
10.05.2018
06:56:57
Всем привет! Подскажите тузлу, которая позволяет строить планы запросов как студия MS SQL, только для больших процедур, потому как студия не отображает полностью план процедуры.

Samat
10.05.2018
07:48:15
ребят, правильный ли запрос? DELETE l1 FROM leads l1 LEFT JOIN statuses s1 ON l1.status_id = s1.id, leads l2 LEFT JOIN statuses s2 ON l2.status_id = s2.id WHERE l1.id > l2.id AND l1.phone = l2.phone AND s1.pipeline_id = s2.pipeline_id нужно удалить из leads все с одинаковым phone и заджойненным pipeline_id из statuses, кроме самого первого из повторных

Эльвира
10.05.2018
09:58:10
добрый день)

Google
Vladislav
10.05.2018
09:58:43
добрый, dba-user

Ilia
10.05.2018
10:00:24
ребят, правильный ли запрос? DELETE l1 FROM leads l1 LEFT JOIN statuses s1 ON l1.status_id = s1.id, leads l2 LEFT JOIN statuses s2 ON l2.status_id = s2.id WHERE l1.id > l2.id AND l1.phone = l2.phone AND s1.pipeline_id = s2.pipeline_id нужно удалить из leads все с одинаковым phone и заджойненным pipeline_id из statuses, кроме самого первого из повторных
0) какой-то миск из JOIN-ов и перечисления таблиц через запятую во FROM... Как минимум, это нечитаемо, как максимум, СУБД не поймёт. 1) LEFT JOIN - неправильно использовать тут, потому что ты фильтруешь записи тут, потому что у тебя DELETE, а внешний JOIN НЕ ПОДРАЗУМЕВАЕТ фильтрацию. По факту у тебя JOIN ВСЁ РАВНО НЕ ВНЕШНИЙ, поскольку поля обеих таблиц участвуют в WHERE. Подозреваю, что логика запроса также может быть нарушена.

Igor
10.05.2018
10:51:51
Ты бы указал на СУБД, у всех СУБД планы разные.
За был что тут про все СУБД канал. MS SQL

Ilia
10.05.2018
10:53:02
Поправь лучше начальное сообщение.

ко?TEXHIK
10.05.2018
11:01:02
Что-то я туплю. Можно определение триггера вытащить как-то в постгресе? чтоб не ручками строить, а готовое? Ато гуглится только как процедуру достать,а она мне как раз нафиг не сдалась

или только руками пересобирать на основе information_schema.triggers?

Anton
10.05.2018
11:16:20
information_schema.triggers - это не очень похоже на постгрес

Или там такая схема тож есть? Не припомню

ко?TEXHIK
10.05.2018
11:16:56
https://www.postgresql.org/docs/9.5/static/information-schema.html

Vladislav
10.05.2018
11:56:06


Виктор
10.05.2018
11:57:30
Дык может иньекцию просто попытались сделать?

Aleksandr
10.05.2018
12:44:00
Здравствуйте! Я с вопросом (MsSQL2017): The specified pattern did not return any files or does not represent a valid file share. Verify the pattern parameter and rerun the command. Сделал я аудит (в локальный файл, на одном сервере с СУБД), настроил, создал вьюху, делаю по ней клик и селект 1000 строк, а оно вот так в ответ ругается. На другой ДБ всё завелось сразу и влёт. Что смотреть\как дебажить? Селект вручную через execute отрабатывает корректно.

Google
Aleksandr
10.05.2018
12:50:24
Если совсем глубоко, то с помощью вот этой штуки docs.microsoft.com/en-us/sysinternals/downloads/procmon отследить обращения к файлам.
Ох, не хотелось, но придётся, спасибо, пока что так начну искать проблему.

Sergey
10.05.2018
12:51:31
Ох, не хотелось, но придётся, спасибо, пока что так начну искать проблему.
Да понятно что слишком "тяжёлое" средство и вывод долго фильтровать придётся чтобы докопаться до первопричины.

Aleksandr
10.05.2018
13:26:00
Да понятно что слишком "тяжёлое" средство и вывод долго фильтровать придётся чтобы докопаться до первопричины.
Открыл. Посмотрел. Не нашёл обращений туда, куда искал. Переименовал вьюху и, на всякий случай, папку аудита. Всё завелось.

Alexander
11.05.2018
06:48:56
Всем привет. Парни, можно ли както в MySQL сделать одним запросом такую штуку: Есть форма для добавления книги, там есть поле "Автор", которое заполняется от руки и поля книги (title, description, ...) Авторы и книги хранятся в разных таблицах, связаны по id <-> user_id Надо при добавлении книги проверять наличие автора в таблице авторов и отдавать id и инсертить книгу - это решается insert from select... А если автора нет, то надо его добавить, получить id добавленного и потом с этим id инсертить книгу. Это в одном запросе реально или все-таки придется на несколько разбить?

Alexander
11.05.2018
06:53:45
Можно сделать автора уникальным и всегда инсёртить, поставив на конфликт игнор/апдейт. Но я не уверен, что это хорошая идея..
то есть, лучше все-таки разнести эту логику? и, например, сначала проверять наличие автора, а потом по условиям выполнять тот или иной код, верно?

а... если всегда инсёртить, может как-то через транзакции можно?

ко?TEXHIK
11.05.2018
07:01:29
Ну ты по определению не сможешь сделать добавление в две таблицы одним запросос.

Но ты можешь сделать это одним обращением к базе если в нем сразу два запроса отправищь

Insert into t1 values(1,cat,15); Insert into t2 values(dogz, Igor, 27);

Vladislav
11.05.2018
07:26:29
дружно идем читать, что такое транзакция

Ilia
11.05.2018
07:54:58
дружно идем читать, что такое транзакция
Погоди, про транзакции до них пока не дошло...

Vladislav
11.05.2018
07:56:59
надо чтобы дошло до момента написания процедуры

Ilia
11.05.2018
07:57:55
"О сколько нам ошибок трудных готовит просвещенья дух..."

Alexander
11.05.2018
07:58:05
Надо писать хранимую процедуру
О, а это вариант. А можно где подробнее почитать с примерами?

Ilia
11.05.2018
07:58:14
mysql.com

не знаешь такой сайт?

Google
Alexander
11.05.2018
07:58:51
не знаешь такой сайт?
Два раза нажимал

lost
11.05.2018
07:58:53
майсиквел дат ком

Al
11.05.2018
08:00:17
майсиквел дат ком
Ох уж этот рязанский акцент :)

lost
11.05.2018
08:00:43
Ох уж этот рязанский акцент :)
май нейм ис саша, айм ливин раша

Ilia
11.05.2018
08:01:13
Йу спиик инглишь?

lost
11.05.2018
08:01:27
йес, а литл бит, ар ю?

Ilia
11.05.2018
08:02:49
https://www.youtube.com/watch?v=PZq01kQ5Pr8

Samat
11.05.2018
10:51:56
есть табличка с 3 000 000 записей. запрос SELECT COUNT(DISTINCT lead_id) AS some_alias FROM lead_statistics WHERE is_actual in ('1', '2') and lead_statistics.created_at >= '2018-05-01 00:00:00' and lead_statistics.created_at <= '2018-05-12 00:00:00' выполняется 6 сек. как можно ускорить?

Виктор
11.05.2018
11:06:22
EXPLAIN смотреть надо

Samat
11.05.2018
11:07:39


Виктор
11.05.2018
11:15:46
Селективность нормальная, может помочь индекс на created_at

Учтите, при большом диапазоне дат(результатирующих записей) индекс все равно откажется работать

Ну и забегая вперед, когда статистики много проще разложить в сводные таблицы в нужных разрезах

Samat
11.05.2018
11:20:57
лол, создал индекс на created_at. запрос выполнялся более 30 сек. на 30 остановил,чтобы сервак не лег)

Виктор
11.05.2018
11:23:06
Небось еще на проде выполнял, кто ж так делает

Samat
11.05.2018
11:23:50
прод и дев лежат на одном хостинге. меня за запросы к этой таблице уже блокировали

Виктор
11.05.2018
11:24:01
браво)

Виктор
11.05.2018
11:24:57
Еще и хостинг. Какую вы производительность хотите в таком случае

Samat
11.05.2018
11:25:12
максимум 2 секунды)

Google
Виктор
11.05.2018
11:25:31
Если преимущественно по дате фильтруете, то можно партиционировать по ней

Artyom
11.05.2018
11:39:02
всем привет, может кто подскажет. mysql во время рековери стартует еще процессы рековери и соответственно блочит себя же.. никто не сталкивался с таким ?

такое ощущение что по таймауту что ли отваливается

доходит примерно до 40% а потом опять лсн начинает считывать стартуя перед этим процесс

Samat
11.05.2018
12:45:02
сейчас взял тестовый период на vps с хорошим железом. пробую залить базу и выполнить запрос

Ilia
11.05.2018
12:45:49
всем привет, может кто подскажет. mysql во время рековери стартует еще процессы рековери и соответственно блочит себя же.. никто не сталкивался с таким ?
С чего ты взял, что он сам себя блокирует? Скорее всего, это просто recovery не срабатывает и падает, так что прощайся со своей Бд (если я прав конечно) гляди в логи

Artyom
11.05.2018
12:48:23
С чего ты взял, что он сам себя блокирует? Скорее всего, это просто recovery не срабатывает и падает, так что прощайся со своей Бд (если я прав конечно) гляди в логи
запустил майсклд в скрине с вербозе... все норм отрекаверил.. правда почему то поругался что нет директории var/run/mysqld , создал.. запустил уже скриптом и все норм

почему она удалилась хз

Vladimir
11.05.2018
13:34:38
Добрый день. Хочу написать простенькое приложение под Андроид. Имеем ленту неких событий (изначально она одинаковая для всех пользователей), выводим их по одному от самых свежих к самым старым (DESC). Просмотренные скрываем навсегда только для конктреного пользователя, конечно. Если использовать старую добрую MySQL, то прихоидит в голову к таблице с событиями добавить таблицу со связями между id пользователя и id просмотренно записи. После чего выбирать нужные для показа записи запросом: SELECT t1.id, t1.values FROM t1 WHERE t2.user_id = xxx AND t1.id NOT IN (SELECT t2.id FROM t2) ORDER BY t1.id DESC LIMIT 1 Сомнения вызывает то, что 10 тыс пользователей, просмотрев по 10 тыс записей уже нагенерят 100 млн строк в t2... Будет ли это проблемой и на каком количестве? Можно ли как-то иначе все это реализовать, чтобы использовать NoSQL (Firebase от Гугла) или из-за отсутствия аналогов NOT IN и "!=" реляционная БД будет лучше?

Ilia
11.05.2018
14:53:20
Добрый день. Хочу написать простенькое приложение под Андроид. Имеем ленту неких событий (изначально она одинаковая для всех пользователей), выводим их по одному от самых свежих к самым старым (DESC). Просмотренные скрываем навсегда только для конктреного пользователя, конечно. Если использовать старую добрую MySQL, то прихоидит в голову к таблице с событиями добавить таблицу со связями между id пользователя и id просмотренно записи. После чего выбирать нужные для показа записи запросом: SELECT t1.id, t1.values FROM t1 WHERE t2.user_id = xxx AND t1.id NOT IN (SELECT t2.id FROM t2) ORDER BY t1.id DESC LIMIT 1 Сомнения вызывает то, что 10 тыс пользователей, просмотрев по 10 тыс записей уже нагенерят 100 млн строк в t2... Будет ли это проблемой и на каком количестве? Можно ли как-то иначе все это реализовать, чтобы использовать NoSQL (Firebase от Гугла) или из-за отсутствия аналогов NOT IN и "!=" реляционная БД будет лучше?
Нененене.

ХОчешь чтобы быстро работало — делай наоборот. Связь для пользователя с записями, КОТОРЫЕ ЕМУ НАДО БУДЕТ ПОКАЗАТЬ! При просмотре связь удаляется. При добавлении события она связывается со всеми пользователями, которые заинтересованы в ней

Добрый день. Хочу написать простенькое приложение под Андроид. Имеем ленту неких событий (изначально она одинаковая для всех пользователей), выводим их по одному от самых свежих к самым старым (DESC). Просмотренные скрываем навсегда только для конктреного пользователя, конечно. Если использовать старую добрую MySQL, то прихоидит в голову к таблице с событиями добавить таблицу со связями между id пользователя и id просмотренно записи. После чего выбирать нужные для показа записи запросом: SELECT t1.id, t1.values FROM t1 WHERE t2.user_id = xxx AND t1.id NOT IN (SELECT t2.id FROM t2) ORDER BY t1.id DESC LIMIT 1 Сомнения вызывает то, что 10 тыс пользователей, просмотрев по 10 тыс записей уже нагенерят 100 млн строк в t2... Будет ли это проблемой и на каком количестве? Можно ли как-то иначе все это реализовать, чтобы использовать NoSQL (Firebase от Гугла) или из-за отсутствия аналогов NOT IN и "!=" реляционная БД будет лучше?
NoSQL как всегда тут ни при чём вообще.

Vladimir
11.05.2018
14:57:40
а при 15.000 записей и регистрации нового пользователя придется добавить 15.000 связей

Александр
11.05.2018
15:03:48
т.е. если у меня 100 тысяч пользователей, то мне при добавлении новой записи надо добавить 100 тысяч связей?
можно хранить идентификатор последней просмотренной записи для каждого пользователя

Александр
11.05.2018
15:04:02
и общую ленту событий

lost
11.05.2018
15:04:13
только с мелким уточнением

Google
lost
11.05.2018
15:04:26
юзверь же может смотреть не по порядку

Vladimir
11.05.2018
15:04:26
можно хранить идентификатор последней просмотренной записи для каждого пользователя
если бы мы шли от 1 до 100.000, то это бы сработало :)) но мы идем от 100.000 к 1 и завтра может появиться 100.001

юзверь же может смотреть не по порядку
не может. мы задаем порядок

lost
11.05.2018
15:04:48
эээ, какие вы злые

Vladimir
11.05.2018
15:04:51
но он не должен увидеть одну запись дважды

Anton
11.05.2018
15:05:25
если бы мы шли от 1 до 100.000, то это бы сработало :)) но мы идем от 100.000 к 1 и завтра может появиться 100.001
А что мешает в очереди такой убогой сделать ещё один идентификатор порядка?

lost
11.05.2018
15:05:36
типа один раз проскролил и всё?)

Al
11.05.2018
15:05:54
"Эта запись скрыта от тебя НАВСЕГДА.. потому что ты ее уже видел" ?

Vladimir
11.05.2018
15:05:54
типа один раз проскролил и всё?)
да... типа как в RSS - посмотрел и все

lost
11.05.2018
15:06:03
вообще печаль

Александр
11.05.2018
15:06:19
если бы мы шли от 1 до 100.000, то это бы сработало :)) но мы идем от 100.000 к 1 и завтра может появиться 100.001
вы добавите ему запись и у него будет указатель на последний элемент ленты

Al
11.05.2018
15:06:59
типа один раз проскролил и всё?)
Угу. И потом уже даже не вернешься и не перечитаешь. Потому что НАВСЕГДА

Страница 504 из 718