powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite. Помогите оптимизировать сложный запрос.
3 сообщений из 3, страница 1 из 1
SQLite. Помогите оптимизировать сложный запрос.
    #35755837
Crew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 2 таблицы в базе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE Table1 (
  ID  integer PRIMARY KEY AUTOINCREMENT NOT NULL,
  Field1  text NOT NULL,
  Field2  text NOT NULL
);

CREATE INDEX Table1_Index1
  ON Table1
  (Field1, Field2);

CREATE TABLE Table2 (
  ID1  integer NOT NULL,
  ID2  integer NOT NULL,
  Field3  boolean NOT NULL,
  Field4  boolean NOT NULL,
  PRIMARY KEY (ID1, ID2)
);
Количество символов в значениях полей Field1 и Field2 не превышает 10.
Поля ID1 и ID2 содежать значения из поля ID таблицы Table1. Получается некая такая связь типа многие ко многим сама на себя.

И есть мудреный запрос:
Код: plaintext
1.
2.
3.
4.
SELECT Field1, Field2 FROM Table1 WHERE ID IN 
(SELECT ID1 FROM Table2 WHERE Field3 = 'True' AND ID1 IN 
(SELECT ID FROM Table1 WHERE 
Field2 = substr('Строка_из_символов_не_более_десяти', 1 ,length(Field2))))
ORDER BY RANDOM() LIMIT  1 

Помогите пожалуйста оптимизировать его, чтобы выполнялся быстрее.
...
Рейтинг: 0 / 0
SQLite. Помогите оптимизировать сложный запрос.
    #35758079
Crew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С наставления на путь истинный своим другом, я оптимизировал запрос вот так:
Код: plaintext
1.
2.
3.
SELECT Field1, Field2 from Table1, Table2 
WHERE ID = ID1 AND Field3 = 'True' 
AND Field2 = substr('Строка_из_символов_не_более_десяти', 1 ,length(Field2))
Group By ID ORDER BY RANDOM() LIMIT  1 
Возможно кто-нибудь может предложить вариант получше?

И еще один вопрос, Field3 у меня типа bool, и в условии сравнение идет со значением "True". Не будет ли быстрее выполняться сравнение, если Field3 сделать типа smallint, и хранить там "0" и "1", и сравнивать в условии соответственно со значением "1"?
...
Рейтинг: 0 / 0
SQLite. Помогите оптимизировать сложный запрос.
    #35759012
Crew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал еще быстрее, видимо у меня не правильно джойнились таблицы:
Код: plaintext
1.
2.
3.
SELECT DISTINCT Field1, Field2 from Table2, Table1 
WHERE ID = ID1 AND Field3 = 'True' 
AND Field2 = substr('Строка_из_символов_не_более_десяти', 1 ,length(Field2))
ORDER BY RANDOM() LIMIT  1 

Первый вариант запроса выполнялся за 1.5-2 секунды, второй вариант за 0.78-0.83 секунды. Третий вариант выполняется за 0.00-0.02 секунды.
В общем на этом думаю продолжать тему не имеет смысла.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite. Помогите оптимизировать сложный запрос.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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