170 похожих чатов

Добрый день. Очень рассчитываю на вашу помощь.Думал что закончил проект,

а потом увидел, что запрос к базе занимает 1.3 минуты.

Общий вид схема
1 id
2 under_id (позиция в группе)
3 Ф
4 И
5 О
6 uid
7 gr_id
8 agreement (выбрана ли основной 0/1)
9 bforeign

Индексы на фио, agreement, gr_id
В прагмах отключал синхрон.

Изначально 9 столбца не было. (Это уже тесты)
Суть запроса, выдать список пользователей и ещё доп столбцом есть ли у него уже другая основная группа.
SELECT under_id,F,I,O,uid,agreement,
EXISTS (SELECT id FROM users u WHERE u.gr_id<>? AND u.agreement=1 AND ( (m.uid NOT NULL AND m.uid=u.uid) or (m.F NOT NULL AND m.F=u.F AND m.I=u.I AND m.O=u.O ) ))

Но в базе на 300к записей: запрос занимает 1-2 минуты на моём ноуте. Сервак будет медленнее.

Тут я подумал. Ок, тогда просто просчитаю все данные заранее и запишу. На словах это должно было делаться - одна группа около минуты, и итог 2.5 часа на создание бд. Но в результате(я взял 15 групп из 320). Через 40 минут запроса ниже - я не получил ничего(
UPDATE users
SET
bforeign = (SELECT id FROM users u WHERE u.gr_id<>m.gr_id AND u.agreement=1 AND ( (m.uid NOT NULL AND m.uid=u.uid) or (m.F NOT NULL AND m.F=u.F AND m.I=u.I AND m.O=u.O ) ))
FROM users m

Всё на базе sqlite

33 ответов

53 просмотра

Сори канешн но грех жаловаться на скорость, когда у тебя 300к записей. Самый лучший вариант для тебя это прочитать ТЗ и найти строчку : требование к скорости по не предъявляться Либо оптимизировать свои запросы ( там чето про прекрасные формы и 8 шагов оптимизации ) А ещё грех жаловаться на SQL lite Хз есть ли там вьюхи которые уже выводят то что тебе надо

индексы есть?

Mr.Dingo- Автор вопроса
Mr.Dingo
Да

покажи explain запроса

Mr.Dingo- Автор вопроса
Николай Синяк
Сори канешн но грех жаловаться на скорость, когда ...

Проект мой. Поэтому как таковых сроков нет. Но когда приложение тебе должно показать этот список. А у тебя 1.5 минуты запрос - это очень плохо.

Mr.Dingo
screenshot

я сказал explain запроса

Mr.Dingo
screenshot

EXPLAIN SELECT запрос

Mr.Dingo- Автор вопроса
Tishka17
я сказал explain запроса

Извиняюсь за тупость. Никогда не использовал Explain. На какой именно запрос нужно, на индексы?

Mr.Dingo
Извиняюсь за тупость. Никогда не использовал Expla...

На тот запрос который у тебя тормозит.

Mr.Dingo
Извиняюсь за тупость. Никогда не использовал Expla...

на тот, который пытаешься индексы создать

Mr.Dingo- Автор вопроса
Tishka17
На тот который тормозит

Я могу сюда pastebin ссылки отправлять, то что отправил выше - удалена?

Mr.Dingo
Я могу сюда pastebin ссылки отправлять, то что отп...

отправляй большие куски ссылкой на пастюин, да

Mr.Dingo- Автор вопроса
Alex
На тот запрос который у тебя тормозит.

Вот update set https://pastebin.pl/view/dc64f9a9

Mr.Dingo
Вот update set https://pastebin.pl/view/dc64f9a9

не похоже на результат explain

Mr.Dingo
screenshot

ты можешь октрыть консоль sqlite и вызвать там это?

Через 40 минут ничего ибо транзакция и уровни изоляции же. Либо все после успешного окончания, либо ничего.

Mr.Dingo- Автор вопроса
Tishka17
ты можешь октрыть консоль sqlite и вызвать там это...

Как правильно запрос должен быть прописан EXPLAIN QUERY PLAN ...?

Mr.Dingo- Автор вопроса
Mr.Dingo- Автор вопроса
Mr.Dingo- Автор вопроса
Mr.Dingo
https://pastebin.pl/view/1d18ba06

Все ещё нужна помощь. Извиняюсь за пересылку, просто чтобы вопрос не затерялся

Mr.Dingo
https://pastebin.pl/view/1d18ba06

черт, как же по другому выглядят эксплейны на sqlite

Mr.Dingo
screenshot Что-то делаю не так

я правильно понимаю, что ты хочешь обновить все 300к записей?

Mr.Dingo- Автор вопроса
Mr.Dingo
Абсолютно верно

На 4к записей в джоин запросе уходит ≈ минута

Mr.Dingo
На 4к записей в джоин запросе уходит ≈ минута

Мне кажется ты что то неправильно сделал

первый запрос покажи целиком

Вместо exists быстрее будет использовать джоин, если не null - значит существует

Ткну пальцем в небо. Sqlite не очень хорошо умеет оптимизировать exists в приципе, а у вас внутри него ещё и or. Вполне неиллюзорно оно сканирует всю таблицу 300к раз

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта