Это быстрее читать из столбцов фиксированной ширины в SQLite? - PullRequest
6 голосов
/ 14 декабря 2010

Было бы обычно быстрее читать из таблицы, где не хранятся данные varchar или другой переменной длины? В MySQL это быстрее, потому что он может точно рассчитать, где будет храниться строка на диске.

Ответы [ 2 ]

13 голосов
/ 14 декабря 2010

Этот вопрос не имеет смысла в контексте SQLite, поскольку он поддерживает только один тип поля TEXT.Различия «фиксированная ширина» и «переменная длина» здесь не существует.

В то время как SQLite позволит вам определить поле как имеющее определенный тип, все, что он делает, это (самое большее) наборпредпочтение этого поля типу, используемому при хранении неоднозначных данных (например, будет ли «3» сохраняться как INTEGER, REAL или TEXT).Вы по-прежнему можете хранить любые данные в любом поле SQLite независимо от его типа.

В частности, относящееся к CHAR и VARCHAR, http://www.sqlite.org/datatype3.html сообщает нам:

Еслиобъявленный тип столбца содержит любую из строк "CHAR", "CLOB" или "TEXT", тогда этот столбец имеет сходство TEXT.Обратите внимание, что тип VARCHAR содержит строку «CHAR» и, таким образом, ему присваивается сходство TEXT.

5 голосов
/ 25 февраля 2013

Поскольку SQLite использует только записи переменной длины , я бы предположил, что они не реализовали оптимизацию поиска с фиксированной шириной, когда строки имеют одинаковую длину.

И, как указал Дейв, текст все еще можно хранить в полях INT.Поскольку SQLite никогда не усекает данные , это означает, что SQLite разрешает столбцу с фиксированной шириной, например INT, хранить данные переменной длины.Поэтому невозможно реализовать оптимизацию поиска с фиксированной шириной.

...