powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Медленная сортировка по текстовому полю.
17 сообщений из 17, страница 1 из 1
Медленная сортировка по текстовому полю.
    #38413482
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юзаю ASP.NET + SQLite

Есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE [Table1] (
  [Table1ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
  [Table1Name] TEXT(256) NOT NULL, 
...
)

CREATE INDEX [IDX_Table1Name] ON [Table1] ([Table1Name] COLLATE NOCASE ASC);



Записей в таблице около ~ 10 000.

Запрос:
Код: sql
1.
2.
3.
 SELECT * 
 FROM Table1
 ORDER BY Table1Name DESC LIMIT N,M



При одновременном запросе нескольких пользователей тормозит просто фантастически.
Можно 20-30 секунд ждать.
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38413537
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стесняюсь спросить...

1. зачем создал индекс к таблице?
2.potkinПри одновременном запросе нескольких пользователейзачем выбрал SQLite?
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38413544
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создание индекса к полю это нормально.
Использование SQLite в многопользовательской среде - это совершенно не нормально.
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38413561
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlСоздание индекса к полю это нормальнокогда индекс используется в селектах))
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38413578
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторзачем выбрал SQLite?
Ограничение других СУБД на размер БД.
На размер дискового пространства ограничения приемлемые.

авторИспользование SQLite в многопользовательской среде - это совершенно не нормально.
Так многопользовательские Селекты только.
БД же не блокируется при одновременных Селектах.

авторкогда индекс используется в селектах))
Не используется?
Пардон, не знал ...
"Думал" как в MS SQL - используется ...

Аналогичная же фигня и с полем типа "Дата".
Хотя СкуЛайт использует все поля как Стринг, если мне не изменяет память.
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38413583
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор"Думал" как в MS SQL - используется ...
Пардон, с поиском перепутал.
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38413606
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkin, у тебя индекс возрастающий, а сортировка в селекте - убывающая. мне до этого казалось, что в sqlite индексы однонаправленные и потому в твоем селекте не используются. но, по результатам теста, они все-таки двунаправленные и дают отличный профит при разных "направлениях"

хотя, применительно к 10 тыс строк, тормозов на 20-30 сек добиться очень сложно даже без индексов :) либо .net дает какой-то кривой доступ к базе, либо ты его не настроил или используешь ненадлежащим образом, либо комп сильно загружен чем-то иным, либо блокировки дают такие "паузы"
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38413657
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chу тебя индекс возрастающий, а сортировка в селекте - убывающая. мне до этого казалось
Я ошибся, когда пост писал.
С индексами всё гут (ASC).

Вся хрень, скорее всего в этом:
Код: c#
1.
 SQLiteFunction.RegisterFunction(typeof(LowerFunction));


Lower, Upper, кириллица, ...
Вот и скорость соответствующая )))
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38413691
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, смена регистра занимает 20 сек))
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38415428
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
White OwlИспользование SQLite в многопользовательской среде - это совершенно не нормально.

А может, надо документацию почитать?.. WAL режим черти-когда добавлен и вполне себе используется в продакшене. Если же еще и на другие СУБД документацию посмотрите, то обнаружите, что самые используемые - блокировочники. В частности, много одновременных "длинных" пишущих транзакций убьют PostgreSQL - для каждой будет создаваться своя область видимости и вдобавок сборщик мусора не отработает все это безобразие, так что таблицы и индексы будут неограниченно "пухнуть".

Для одновременных выборок - SQLite много лучше PostgreSQL, к примеру, который все данные сначала тащит в память, где они зачастую не помещаются, после чего постгрес начинает кидать данные между кэшем и свопом со всеми вытекающими. У меня в блоге есть тесты, из реальных проектов, где SQLite быстрее PostgreSQL на 3 порядка на селектах.

Имхо вернее будет сказать, что эскулайт (пока?) непригоден в среде, где есть невероятно много коротких пишущих транзакций - типа кластера оракл у сотовых операторов :) Ждем SQLite4 ;)
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38415438
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
potkin
Код: sql
1.
CREATE INDEX [IDX_Table1Name] ON [Table1] ([Table1Name] COLLATE NOCASE ASC);


Код: sql
1.
2.
3.
 SELECT * 
 FROM Table1
 ORDER BY Table1Name DESC LIMIT N,M



Индекс создан с коллэйшеном NOCASE, а в запросе COLLATE NOCASE не указано. Поправьте, чтобы индекс использовался в запросе.
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38415999
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGА может, надо документацию почитать?..А может надо подумать?
База хранится в файле. Доступ к файлу каждый юзер делает сам.
А это значит что доступ к базе в первую очередь разграничивает ОС. Ты можешь сказать какая ОС используется у potkin'а? Ты можешь сказать какая версия sqlite используется у его клиентов и включен ли WAL у каждого из его клиентов?

Уж который раз мы с тобой об этом говорим! Ну нельзя советовать embedded by design DBMS как универсальную базу для всех случаев жизни!
Да, у некоторых гуру SQLite показывает чудеса производительности. Да, если немножко поднапрячься и соблюсти несколько элементарных (для кого-то) условий, то SQLite вполне потянет задачи enterprise уровня на который обычно ставят что-нибудь типа Oracle, Sybase ASE, MS SQL, или что-нибудь из более дешевых но не менее мощных.
Да, я верю что у тебя есть личный опыт использования SQLite в задаче с такой нагрузкой. НО ТЫ ОДИН ТАКОЙ! Пойми это наконец.


Ты вот это утверждение видел?
potkinБД же не блокируется при одновременных Селектах.Ты все еще веришь что существование WAL спасет и все люди пытающиеся использовать встраиваемую базу в качестве серверной сделают это правильно?


На каком-нибудь Феррари тоже можно уголь из карьера возить и при наличии хорошего водителя и группы гениальных механиков эта машина сможет перевезти больше угля чем стандартный карьерный самосвал... Но...
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38418627
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТы можешь сказать какая ОС используется у potkin'а?
В первом посту писал, что ASP.NET, значит Windows (2008 Sever)

White Owl Ты вот это утверждение видел?
potkinБД же не блокируется при одновременных Селектах.

Мои тесты показывают, что ничего не блокируется, даже при "небольших объёмах" INSERT и UPDATE для SELECT-ов

MBG Индекс создан с коллэйшеном NOCASE, а в запросе COLLATE NOCASE не указано. Поправьте, чтобы индекс использовался в запросе.

Так:
Код: sql
1.
2.
3.
SELECT * FROM Table1
ORDER BY Table1Name ASC COLLATE NOCASE
LIMIT N,M


?
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38420108
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вся загвоздка была в lower .
Я прошу прощения, забыл её написать

Код: sql
1.
2.
3.
SELECT * 
 FROM Table1
 ORDER BY lower(Table1Name) DESC LIMIT N,M


Т.к. я использую кириллицу.
СкуЛайт различает регистр для кириллицы.
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38421599
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
White OwlMBGА может, надо документацию почитать?..А может надо подумать?

Ты вот это утверждение видел?
potkinБД же не блокируется при одновременных Селектах.Ты все еще веришь что существование WAL спасет и все люди пытающиеся использовать встраиваемую базу в качестве серверной сделают это правильно?

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

http://www.sqlite.org/wal.html WAL provides more concurrency as readers do not block writers and a writer does not block readers. Reading and writing can proceed concurrently.


Так что все ок, при селектах БД _не блокируется_. А в последней версии еще интереснее сделали, см. офсайт :) И я точно не "один такой", читающий документацию :)
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38421985
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGWhite Owlпропущено...
А может надо подумать?

Ты вот это утверждение видел?
пропущено...
Ты все еще веришь что существование WAL спасет и все люди пытающиеся использовать встраиваемую базу в качестве серверной сделают это правильно?

Документацию все же надо читать, чтобы огульно не ругать людей, говорящих правильные вещи:Вот-вот. Читай документацию:
http://www.sqlite.org/wal.html Activating And Configuring WAL Mode

An SQLite database connection defaults to journal_mode=DELETE. To convert to WAL mode, use the following pragma:

PRAGMA journal_mode=WAL;

The journal_mode pragma returns a string which is the new journal mode. On success, the pragma will return the string "wal". If the conversion to WAL could not be completed (for example, if the VFS does not support the necessary shared-memory primitives) then the journaling mode will be unchanged and the string returned from the primitive will be the prior journaling mode (for example "delete").

А теперь вопрос на засыпку: Ты уверен что ТС сделал PRAGMA journal_mode=WAL;? Ты уверен что он сделал это на всех клиентах?
И я еще раз повторяю главный вопрос, который ты почему-то игнорируешь: Ты уверен что у ТС на всех клиентах стоит одна и та-же версия SQLite?

MBGТак что все ок, при селектах БД _не блокируется_. А в последней версии еще интереснее сделали, см. офсайт :) И я точно не "один такой", читающий документацию :)Читать ее мало. Надо еще понимать что там написано.
А из тех кто сюда приходит с вопросами - 99% не читают документацию вообще. А 50% из тех кто читает - не понимают. И далеко не все из понимающих делают выводы из понятого.
...
Рейтинг: 0 / 0
Медленная сортировка по текстовому полю.
    #38422718
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlна всех клиентах стоит одна и та-же версия SQLite
У меня Веб, поэтому вся работа с БД - на сервере.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Медленная сортировка по текстовому полю.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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