INNER JOIN создает проблему с памятью - PullRequest
0 голосов
/ 03 марта 2020

В приложении Android и SQLite

INNER JOIN в QUERY создает проблему с памятью следующим образом:

Окно заполнено: запрошенное выделение 372 байта, свободного места 106 байтов, размер окна 2097152 байта

Запрос выглядит следующим образом:

SELECT * FROM TABLEA A 
INNER JOIN TABLEB B 
ON A.ID1 = B.ID1 AND A.ID2 = B.ID2 
WHERE B.DATA3 = 'Y'

Таблица A состоит из следующих 4 столбцов:

ID1,ID2,DATA1,DATA2: 

ID1   ID2   DATA1   DATA2 
A     E     D1      D4
B     F     D2      D5
C     G     D3      D6
D     H     D4      D7

Таблица B состоит из следующих 3 столбцов:

ID1,ID2,DATA3: 

ID1   ID2   DATA3 
A     E     Y
B     F     N
C     G     Y
D     H     N

Результат QUERY выглядит следующим образом:

ID1   ID2   DATA1   DATA2 
A     E     D1      D4
C     G     D3      D6

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

Еще один момент - проверить проблему с памятью. Я использовал другой QUERY для извлечения данных только из таблицы A без INNER JOIN с таблицей B и номером найденной записи. совпадает с найденным номером записи Queri выше с INNER JOIN, но нет проблем с памятью
Так что я пришел к выводу, что INNER JOIN создает проблему с памятью
Другими словами, проблема не в количестве записей, так как результат QUERY с INNER JOIN слишком большой, потому что я получаю столько записей с другими QUERY ' s без проблем с памятью

Почему?

1 Ответ

1 голос
/ 03 марта 2020

Цитата из Википедии :

И наоборот, внутреннее объединение может привести к катастрофически низкой производительности или даже к серверу cra sh при использовании в запросе большого объема в сочетание с функциями базы данных в предложении SQL Where. [2] [3] [4] Функция в предложении SQL Where может привести к игнорированию в базе данных относительно компактных табличных индексов. База данных может считывать и внутренне объединять выбранные столбцы из обеих таблиц перед уменьшением количества строк с использованием фильтра, который зависит от вычисленного значения, что приводит к относительно огромному количеству неэффективной обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...