powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Оптимизация sql скрипта
5 сообщений из 5, страница 1 из 1
Оптимизация sql скрипта
    #39206865
DanyaNugniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Я не особо глубоко разбираюсь в sql запросов, поэтому прошу у вас помощи.
Есть таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
BEGIN;
--Создание таблицы
CREATE TABLE "table1"(
	"id" Integer PRIMARY key,
	"B1" Integer,
	"B2" Integer,
	"B3" Integer,
	"B4" Integer,
	"B5" Integer,
	"B6" Integer,
	"B7" Integer,
	"B8" Integer,
	"B9" Integer,
	"B10" Integer,
	"B11" Integer,
	"B12" Integer,
	"B13" Integer,
	"B14" Integer,
	"B15" Integer,
	"B16" Integer,
	"B17" Integer,
	"B18" Integer,
	"B19" Integer,
	"B20" Integer,
	"B21" Integer,
	"B22" Integer,
	"B23" Integer,
	"B24" Integer,
	"B25" Integer,
	"B26" Integer,
	"B27" Integer,
	"B28" Integer,
	"B29" Integer,
	"B30" Integer,
	"B31" Integer,
	"B32" Integer,
	"B33" Integer,
	"B34" Integer,
	"B35" Integer,
	"B36" Integer,
	"B37" Integer,
	"B38" Integer,
	"B39" Integer,
	"B40" Integer,
	"B41" Integer,
	"B42" Integer,
	"B43" Integer,
	"B44" Integer,
	"B45" Integer,
	"B46" Integer,
	"B47" Integer,
	"B48" Integer,
	"field" Text );
CREATE INDEX "index_id" ON "table1"( "id" );
CREATE INDEX "index_B1" ON "table1"( "B1" );
CREATE INDEX "index_B2" ON "table1"( "B2" );
CREATE INDEX "index_B3" ON "table1"( "B3" );
CREATE INDEX "index_B5" ON "table1"( "B5" );
CREATE INDEX "index_B4" ON "table1"( "B4" );
CREATE INDEX "index_B6" ON "table1"( "B6" );
CREATE INDEX "index_B7" ON "table1"( "B7" );
CREATE INDEX "index_B8" ON "table1"( "B8" );
CREATE INDEX "index_B9" ON "table1"( "B9" );
CREATE INDEX "index_B10" ON "table1"( "B10" );
CREATE INDEX "index_B11" ON "table1"( "B11" );
CREATE INDEX "index_B12" ON "table1"( "B12" );
CREATE INDEX "index_B14" ON "table1"( "B14" );
CREATE INDEX "index_B13" ON "table1"( "B13" );
CREATE INDEX "index_B15" ON "table1"( "B15" );
CREATE INDEX "index_B16" ON "table1"( "B16" );
CREATE INDEX "index_B18" ON "table1"( "B18" );
CREATE INDEX "index_B17" ON "table1"( "B17" );
CREATE INDEX "index_B19" ON "table1"( "B19" );
CREATE INDEX "index_B21" ON "table1"( "B21" );
CREATE INDEX "index_B20" ON "table1"( "B20" );
CREATE INDEX "index_B22" ON "table1"( "B22" );
CREATE INDEX "index_B23" ON "table1"( "B23" );
CREATE INDEX "index_B24" ON "table1"( "B24" );
CREATE INDEX "index_B25" ON "table1"( "B25" );
CREATE INDEX "index_B26" ON "table1"( "B26" );
CREATE INDEX "index_B27" ON "table1"( "B27" );
CREATE INDEX "index_B28" ON "table1"( "B28" );
CREATE INDEX "index_B29" ON "table1"( "B29" );
CREATE INDEX "index_B30" ON "table1"( "B30" );
CREATE INDEX "index_B31" ON "table1"( "B31" );
CREATE INDEX "index_B32" ON "table1"( "B32" );
CREATE INDEX "index_B33" ON "table1"( "B33" );
CREATE INDEX "index_B34" ON "table1"( "B34" );
CREATE INDEX "index_B35" ON "table1"( "B35" );
CREATE INDEX "index_B36" ON "table1"( "B36" );
CREATE INDEX "index_B37" ON "table1"( "B37" );
CREATE INDEX "index_B38" ON "table1"( "B38" );
CREATE INDEX "index_B39" ON "table1"( "B39" );
CREATE INDEX "index_B41" ON "table1"( "B41" );
CREATE INDEX "index_B40" ON "table1"( "B40" );
CREATE INDEX "index_B42" ON "table1"( "B42" );
CREATE INDEX "index_B43" ON "table1"( "B43" );
CREATE INDEX "index_B44" ON "table1"( "B44" );
CREATE INDEX "index_B45" ON "table1"( "B45" );
CREATE INDEX "index_B46" ON "table1"( "B46" );
CREATE INDEX "index_B47" ON "table1"( "B47" );
CREATE INDEX "index_B48" ON "table1"( "B48" );
COMMIT;

--Добавление записи
INSERT INTO Table1 (B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31,B32,B33,B34,B35,B36,B37,B38,B39,B40,B41,B42,B43,B44,B45,B46,B47,B48,field) VALUES (23,45,34,233,23,45,34,233,34,233,23,45,34,233,23,45,34,233,34,0,23,45,34,233,23,45,34,233,34,233,23,45,34,233,23,45,34,233,34,45,34,233,23,45,34,233,34,34,'234');



Таких записей 10 миллионов. Использую sql запрос для того, чтобы выбрать определённые записи:
Суть запроса заключается в том, чтобы показать только те записи где совпало больше 30 искомых чисел с погрешностью +-2 числа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
SELECT id FROM Table1 WHERE 
					((CASE WHEN (0 BETWEEN B48 - 2 AND B48 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B47 - 2 AND B47 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B46 - 2 AND B46 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B45 - 2 AND B45 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B44 - 2 AND B44 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B43 - 2 AND B43 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B42 - 2 AND B42 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B41 - 2 AND B41 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B40 - 2 AND B40 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B39 - 2 AND B39 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B38 - 2 AND B38 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B37 - 2 AND B37 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B36 - 2 AND B36 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B35 - 2 AND B35 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B34 - 2 AND B34 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B33 - 2 AND B33 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B32 - 2 AND B32 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B31 - 2 AND B31 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B30 - 2 AND B30 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B29 - 2 AND B29 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B28 - 2 AND B28 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B27 - 2 AND B27 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B26 - 2 AND B26 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B25 - 2 AND B25 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B24 - 2 AND B24 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B23 - 2 AND B23 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B22 - 2 AND B22 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B21 - 2 AND B21 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B20 - 2 AND B20 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B19 - 2 AND B19 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B18 - 2 AND B18 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B17 - 2 AND B17 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B16 - 2 AND B16 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B15 - 2 AND B15 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B14 - 2 AND B14 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B13 - 2 AND B13 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B12 - 2 AND B12 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B11 - 2 AND B11 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B10 - 2 AND B10 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B9 - 2 AND B9 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B8 - 2 AND B8 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B7 - 2 AND B7 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B6 - 2 AND B6 + 2) THEN 1 ELSE 0 END) +
					(CASE WHEN (0 BETWEEN B5 - 2 AND B5 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B4 - 2 AND B4 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B3 - 2 AND B3 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B2 - 2 AND B2 + 2) THEN 1 ELSE 0 END) + 
					(CASE WHEN (0 BETWEEN B1 - 2 AND B1 + 2) THEN 1 ELSE 0 END)) >= 30



Работает он очень долго. Помогите, пожалуйста его оптимизировать.
...
Рейтинг: 0 / 0
Оптимизация sql скрипта
    #39207789
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanyaNugniy,

Убери все индексы нафиг, они тут никак не помогут.
Попытайся добавить в таблицу поле с уже вычисленным значением для той ужасной формулы. Или несколько таких полей. Можешь воспользоваться триггерами. Читать тут: http://sqlite.org/lang_createtrigger.html
Сделать индекс по вычисленному полю/полям. Чтобы итоговый запрос выглядел типа
SELECT id FROM Table1 WHERE plus_minus_2>0
...
Рейтинг: 0 / 0
Оптимизация sql скрипта
    #39207934
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanyaNugniy,

Что-то не похоже чтобы условие задачи совпадало с вашим запросом. Я понял бы, что нужно выбрать такие записи, если встречаются не менее 30 из 48 значений, которые между собой отличаются не более +/-2.
Т.е. числа как-то собираются в "кучки", а не разнесены далеко друг от друга.

По вашему же условию, надо найти числа которые в промежутках от -2 до 2, и если такие имеются то, считаем их количество. Так всё же как правильно?
...
Рейтинг: 0 / 0
Оптимизация sql скрипта
    #39208595
DanyaNugniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD, Правильно так "Я понял бы, что нужно выбрать такие записи, если встречаются не менее 30 из 48 значений, которые между собой отличаются не более +/-2."

В моём случае я проверил и скрипт не правильный. Помогите, пожалуйста, составить правильный и по максимуму оптимизировать.
...
Рейтинг: 0 / 0
Оптимизация sql скрипта
    #39208658
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanyaNugniyВ моём случае я проверил и скрипт не правильный. Помогите, пожалуйста, составить правильныйЧитать учебник по статистике. Ключевые слова - median, box-and-whisker diagram, outliers.

DanyaNugniy и по максимуму оптимизировать.Это я уже объяснял.
К тому же, ты используешь SQLite (надеюсь это был осознанный выбор?), а значит и не все что можно, нужно считать в SQL, часть расчетов можно и в Си делать.

Впрочем, как вариант, можно транспонировать твой кошмар и можно будет использовать стандартные sql агрегаты и считать статистику из строк, а не из колонок. Проще будет немного.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Оптимизация sql скрипта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]