В PostgreSQL, быстрее ли включать столбцы TEXT в одну таблицу, а не в отдельную таблицу? - PullRequest
10 голосов
/ 08 декабря 2008

Как вы думаете, какой дизайн работает быстрее на PostgreSQL?

  1. Создание таблицы столбцов из 15 столбцов varchars и тому подобного, но помещение всех столбцов TEXT в отдельную таблицу со ссылкой fkey на эту таблицу. И давайте представим, что вы хотите найти запись с идентификатором «4», но затем вытянуть все строки назад, включая материал из столбцов TEXT в объединенной таблице. И давайте представим, что таблицы имеют 500 000 строк.

  2. Создайте таблицу из 15 столбцов из Varchars и т. П. И включите ваши столбцы TEXT в одну и ту же таблицу. Опять же, представьте то же самое, что и выше - захватите идентификатор записи 4 и извлеките полную запись, и в таблице 500 000 строк.

Я имею в виду, что в большинстве баз данных, как я понимаю, когда вы переходите на физический уровень того, как работают эти столбцы TEXT, они фактически сохраняют небольшой идентификатор в столбце таблицы в каждой строке, и этот идентификатор переходит к отдельный, эксклюзивный блок страницы (или другая номенклатура) в базе данных. Таким образом, мне кажется, что вариант B будет работать быстрее, потому что нет необходимости в накладных расходах соединения fkey, и потому что столбцы TEXT на самом деле не занимают больше, чем целое пространство в этом столбце в данной таблице - и это целое число является ключом в базе данных для блока страницы где-то еще.

Ответы [ 2 ]

16 голосов
/ 10 декабря 2008

PostgreSQL не обрабатывает столбцы TEXT так же, как другие СУБД.

Из своих документов:

Подсказка: между этими тремя типами нет различий в производительности, кроме увеличенного размера хранилища при использовании типа с пробелом и нескольких дополнительных циклов для проверки длины при сохранении в столбце с ограниченной длиной. Хотя символ (n) имеет преимущества в производительности в некоторых других системах баз данных, он не имеет таких преимуществ в PostgreSQL. В большинстве случаев вместо текста следует использовать изменяющийся текст или символ.

Ознакомьтесь с руководством

3 голосов
/ 08 декабря 2008

(B) правильно, по причине, указанной в самом вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...