nesco писал(а):
я ничего против rowid не имею. nesco, дальше не для тебя, а для начинающих применять SQLite в своих разработках.
======================================================
Создание таблицы для SQLite подобным выражением:
CREATE TABLE elements(id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(64),info varchar(64),tab int,pos int,hash varchar(32))
И если ещё на AUTOINCREMENT можно закрыть глаза, то varchar(64) в SQLite полный абсурд.
типы данных в SQLite. Подробно здесь-> [url
http://xbb.uz/db/Tipy-dannyh-v-SQLite-versii-3[/url]]Чтобы избежать путаницы для типов данных полей таблиц лучше использовать базовые типы данных SQLite, которых всего четыре.
INTEGER - Числовой тип данных (целые положительные или отрицательные числа).
для компактности SQLite автоматически изменяет размер данного типа данных в зависимости от значения данных.
REAL - Числовой тип данных имеющий размер 8 байтов и может хранить как целые, так и дробные числа.
TEXT - Текстовый тип данных который может хранить текстовые строки произвольной длины в кодировке UTF-8 или UTF-16. Максимальная длина строки для данного типа данных не лимитирована. Этот же тип данных используется для хранения даты и времени (в символьном отображении).
BLOB - Тип данных для хранения двоичных объектов. Максимальный размер данных данного типа не лимитирован.
INTEGER - Числовой тип данных (целые положительные или отрицательные числа).
для компактности SQLite автоматически изменяет размер данного типа данных в зависимости от значения данных.
REAL - Числовой тип данных имеющий размер 8 байтов и может хранить как целые, так и дробные числа.
TEXT - Текстовый тип данных который может хранить текстовые строки произвольной длины в кодировке UTF-8 или UTF-16. Максимальная длина строки для данного типа данных не лимитирована. Этот же тип данных используется для хранения даты и времени (в символьном отображении).
BLOB - Тип данных для хранения двоичных объектов. Максимальный размер данных данного типа не лимитирован.
Потому, что в начале каждой записи(строки) (ГРУБО!)SQLite кодирует и записывает служебную информацию:код таблицы в БД, Номер строки, смещение начала данных а строке, фактические размеры данных каждой колонки и т.д, поэтому данные в записи идут без разделителей.
И только поэтому, например, запрос:
SELECT * FROM tab WHERE name='Вася'; будет выполнен намного быстрее, чем
SELECT * FROM tab WHERE name LIKE '%Вася%'; (тут и такие шедевры мелькали ) потому, что
в первом случае перебирается только служебная информация записи и ищется - где name имеет длину в четыре знака и только потом сравнивается,
во втором случае перебираются и сравниваются все записи таблицы + обида на весь мир с криком "Тормозит!".