Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite организация базы на скорость выборки(SELECT) / 10 сообщений из 10, страница 1 из 1
04.10.2017, 10:46
    #39530617
47911
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
В общем. База:

CREATE TABLE `ZAnuCu_OnuCAHuE`(
`id` INTEGER PRIMARY KEY,
`HAZBAHuE` TEXT ASC,
`MODELb` TEXT,
`KPATHOCTb` INTEGER,
`DOCTynHIOCTb` INTEGER,
`KAPTuHKA` TEXT,
`KATEGOPuia` INTEGER,
`PAZDEL` INTEGER,
`OnuCAHuE` TEXT,
`CTATyC` TEXT,
`PEDAKTuPOBAHuE` TEXT);
CREATE TABLE `ZAnuCu_KATEGOPuu`(
`id` INTEGER ASC,
`KATEGOPuia` INTEGER ASC,
`PAZDEL` INTEGER ASC,
`PEDAKTuPOBAHuE` TEXT);

CREATE UNIQUE INDEX IF NOT EXISTS `uHDEKC_T_id` ON `ZAnuCu_OnuCAHuE` (`id`);
CREATE INDEX IF NOT EXISTS `uHDEKC_T_HAZBAHuE` ON `ZAnuCu_OnuCAHuE` (`HAZBAHuE`);


ZAnuCu_OnuCAHuE + колонки, которые генерируются при создании базы. Для скорости вытаскивания инфы. ~ 750 000 Записей
KATEGOPuu - Какая запись, в какой категории лежит. Типо одна запись - несколько категорий. Раздел - для скорости добавлено ~ 1 000 000 Записей

Тестовый запрос:

SELECT t.`id`,
t.`HAZBAHuE`,
t.`MODELb`,
t.`KPATHOCTb`,
t.`DOCTynHIOCTb`,
t.`KAPTuHKA`,
t_k.`KATEGOPuia`,
t.`KOLOHKA1239`,
t.`KOLOHKA1267`,
t.`KOLOHKA1272`
FROM
`ZAnuCu_OnuCAHuE` t,
`ZAnuCu_KATEGOPuu` t_k
WHERE t_k.`KATEGOPuia` IN (64, 2680 ... 'и так 579 категорий') AND t_k.`id` = t.`id` ORDER BY t.`HAZBAHuE` ASC LIMIT 0, 1000

Он выполняется за 7.5 секунды. Убираю "ORDER BY t.`HAZBAHuE`" - 50 милисекунд.

Как заставить работать быстрее? При создании базы происходит: " GROUP BY `id` ORDER BY v.`name` ASC" - это записывает в базу SQLite, в которой я копаюсь(Таблицы выше приведены), и из неё пытаюсь выводить уже у себя локально данные. Т.е. пытаюсь ускорить максимально. Какие-нибудь предложения есть? Вроде всё в сортированном виде. Разве "ORDER BY t.`HAZBAHuE` ASC" не должно быстрее работать?(Мне нужна 100% гарантия, что все данные точно в алфавитном виде.)
Причём происходит 2 запроса: 1 - я привёл. 2 - тоже группа категорий, но в обратном алфавитном порядке.

Журнал отключен. База работает только на вывод.
...
Рейтинг: 0 / 0
04.10.2017, 11:10
    #39530633
47911
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
Причём выборка сначала идёт по "ZAnuCu_KATEGOPuu", т.е. никаких гарантий что по умолчанию мне выдадут "Отсортированные по алфавиту(название)" нет.
...
Рейтинг: 0 / 0
04.10.2017, 11:58
    #39530663
Уважаемый автор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
47911,
Индекс по сортируемому полю сделай и будет счастье!
...
Рейтинг: 0 / 0
04.10.2017, 12:16
    #39530679
47911
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
Уважаемый автор47911,
Индекс по сортируемому полю сделай и будет счастье!
А это разве не индекс: "
CREATE INDEX IF NOT EXISTS `uHDEKC_T_HAZBAHuE` ON `ZAnuCu_OnuCAHuE` (`HAZBAHuE`);" ???
...
Рейтинг: 0 / 0
04.10.2017, 16:55
    #39530955
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
47911Уважаемый автор47911,
Индекс по сортируемому полю сделай и будет счастье!
А это разве не индекс: "
CREATE INDEX IF NOT EXISTS `uHDEKC_T_HAZBAHuE` ON `ZAnuCu_OnuCAHuE` (`HAZBAHuE`);" ???Это индекс.
Но у тебя идет выборка по фильтру id, соответственно и используется индекс на id.
А два индекса одновременно использовать невозможно.
...
Рейтинг: 0 / 0
04.10.2017, 21:12
    #39531107
47911
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
White Owl,

Я вас понял. Тогда такой вопрос: у меня есть список категорий, из которых я хочу получить записи(Порядок их важен. По алфавиту, а не по id). Для примера, смотрите "Тестовый запрос" в 1 посту. Так вот. Я добился: чтобы товары шли без сортировки в алфавитном порядке(сразу в базе. Добавил в "ZAnuCu_KATEGOPuu" поле "Название товара" и его отсортировал на входе. Мне нужен алфавитный порядок в категориях, а не в таблице товаров. Т.е. у меня есть список категорий(отсортированный, не по id) и есть отсортированный список товаров(по названию)).


А как мне сделать так, чтобы было: из категории "64 дай мне всё что есть, если меньше 1000 записей", "2680 дай мне всё что есть, если меньше 1000 записей" и так далее, но чтобы при достижении сумарного количества записей "в 1000 едениц" оно мне выдавало результат?


Да. Я знаю: я люблю извращения. Но всёже?
...
Рейтинг: 0 / 0
04.10.2017, 22:06
    #39531150
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
Ну сходу могу предложить поиграться с ручным заданием индексов.
Код: sql
1.
2.
... FROM mytable INDEXED BY index_name ...
... FROM mytable NOT INDEXED ...




Но по хорошему, сортировать надо на клиенте. Вытягиваешь все что отфильтровалось в массив на клиенте и уже из этого массива отрисовываешь в нужной сортировке (там же и постраничное листание сделать будет проще и эффективней).
...
Рейтинг: 0 / 0
05.10.2017, 04:56
    #39531190
47911
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
White OwlНу сходу могу предложить поиграться с ручным заданием индексов.
Код: sql
1.
2.
... FROM mytable INDEXED BY index_name ...
... FROM mytable NOT INDEXED ...




Но по хорошему, сортировать надо на клиенте. Вытягиваешь все что отфильтровалось в массив на клиенте и уже из этого массива отрисовываешь в нужной сортировке (там же и постраничное листание сделать будет проще и эффективней).

Дело в том, что на клиенте, запрос 1000 штук, с сортировкой(тестовый запрос) - 7.5 Планируется 20 000 000 уникальных записей и таблица категорий - минимум раза в 2 больше. А щас: 750 000 записей.
...
Рейтинг: 0 / 0
05.10.2017, 05:08
    #39531191
47911
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
47911,

с сортировкой(тестовый запрос) - 7.5 - секунд выполняется.
...
Рейтинг: 0 / 0
06.10.2017, 19:52
    #39532491
47911
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite организация базы на скорость выборки(SELECT)
В общем вопрос решился таким запросом: индексация по колонкам, которым надо проводить сортировку; Колонки таблицы в количестве 10-20 штук; Не использовать программу "DB Browser for SQLite", т.к. в ней запрос выполняется больше по времени раз в 10.(при сортировке); и поиграться с настройками SQLite при соединении(соединились с базой, отправили настройки - после запрос.)

В общем тестовый запорс в проге выполняется не более 0.5 секунды. А в "DB Browser for SQLite" - 6-7 секунд
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite организация базы на скорость выборки(SELECT) / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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