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 ответов

31 просмотр

Сори канешн но грех жаловаться на скорость, когда у тебя 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к раз

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Какой дос блять?
007
9
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Карта сайта