powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как настроить простой запрос
5 сообщений из 5, страница 1 из 1
Как настроить простой запрос
    #39998165
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть пара таблиц
Код: 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.
/* Disable foreign keys */
PRAGMA foreign_keys = 'off';

/* Begin transaction */
BEGIN;

/* Database properties */
PRAGMA auto_vacuum = 0;
PRAGMA encoding = 'UTF-8';
PRAGMA page_size = 4096;

/* Drop table [something] */
DROP TABLE IF EXISTS [main].[something];

/* Table structure [something] */
CREATE TABLE [main].[something](
  [id] INTEGER PRIMARY KEY AUTOINCREMENT, 
  [x] TEXT);

/* Drop table [used] */
DROP TABLE IF EXISTS [main].[used];

/* Table structure [used] */
CREATE TABLE [main].[used](
  [id] INTEGER PRIMARY KEY AUTOINCREMENT, 
  [id_something] INTEGER CONSTRAINT [fk] REFERENCES [something]([id]));

/* Table data [something] Record count: 5 */
INSERT INTO [something]([rowid], [id], [x]) VALUES(1, 1, 'a');
INSERT INTO [something]([rowid], [id], [x]) VALUES(2, 2, 'b');
INSERT INTO [something]([rowid], [id], [x]) VALUES(3, 3, 'c');
INSERT INTO [something]([rowid], [id], [x]) VALUES(4, 4, 'd');
INSERT INTO [something]([rowid], [id], [x]) VALUES(5, 5, 'e');

/* Table data [used] Record count: 3 */
INSERT INTO [used]([rowid], [id], [id_something]) VALUES(1, 1, 1);
INSERT INTO [used]([rowid], [id], [id_something]) VALUES(2, 2, 3);
INSERT INTO [used]([rowid], [id], [id_something]) VALUES(3, 3, 5);

/* Commit transaction */
COMMIT;

/* Enable foreign keys */
PRAGMA foreign_keys = 'on';



одна табличка id(AUTOINCREMENT),чтото
вторая Used это "использованные" что-то : id(AUTOINCREMENT), id_чтото

Закономерно хочу получить не поюзанное, запросом:

Код: sql
1.
2.
3.
4.
SELECT *
FROM   [main].[something]
       LEFT JOIN [main].[used] ON [main].[something].[id] = [main].[used].[id_something]
WHERE  [main].[used].[id_something] IS NULL;



но EXPLAIN QUERY PLAN постоянно выдает, что хочет полностью сканировать первую таблицу, что ИМХО зря ибо она априори больше таблицы заюзанных.

"id""parent""notused""detail""3""0""0""SCAN TABLE something""13""0""0""SEARCH TABLE used USING AUTOMATIC COVERING INDEX (id_something=?)"

Индексами как только не играл... мож запрос как-то по-другому, хотя и этот весьма прост... Или так и должно...

Зы. сорь, использовал SQLite, он все названия таблиц обернул и mаin еще зачем-то добавил.
...
Рейтинг: 0 / 0
Как настроить простой запрос
    #39998166
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для наглядности переписал запрос

Код: sql
1.
2.
3.
4.
SELECT *
FROM   something
       LEFT JOIN used ON something.id = used.id_something
WHERE  used.id_something IS NULL
...
Рейтинг: 0 / 0
Как настроить простой запрос
    #39998190
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ты себе представляешь алгоритм выполнения этого запроса без полного скана таблицы?

Тут только перебор всех записей и проверка каждой на наличие в used, о чем пишет план выполнения.
...
Рейтинг: 0 / 0
Как настроить простой запрос
    #39998205
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если индекс построить по полю used, возможно будет использоваться INDEX RANGE SCAN. Но нужно проверить на практике, насколько это будет лучше
...
Рейтинг: 0 / 0
Как настроить простой запрос
    #39998233
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не так прочитал) предыдущее можно игнорировать
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как настроить простой запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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