Скорость SQL-запроса, когда в таблице есть столбец типа «Текст» - PullRequest
1 голос
/ 11 октября 2011

Я занимаюсь проектированием базы данных SQL (доступ к которой осуществляется через PHP / MySQL) и у меня есть вопросы по поводу проектирования базы данных таким образом, чтобы помочь веб-сайту работать относительно быстро. Мой точный вопрос относится к скорости при запросе таблицы со многими столбцами, где один столбец имеет тип text . Мне интересно, если

  • эта таблица будет часто запрашиваться,
  • запросы только примерно в 50% случаев будут включать столбец text ,
  • и я указываю имена столбцов, чтобы столбец text не возвращался в этих 50% запросов,

повлияет ли наличие столбца text в таблице на скорость запроса? Как следствие, text столбцы обычно замедляют запросы к базе данных?

Приветствуются любые другие общие советы по проектированию базы данных, помогающие повысить скорость запросов, а также любые предложения по книгам или другим ссылкам на эту тему. Спасибо!

Ответы [ 3 ]

4 голосов
/ 11 октября 2011

afaik нет разницы, если вы добавляете текстовый столбец в таблицу, если вы не используете его в предложении where. если вы используете его в предложении where, определенно хорошо иметь index . Избегайте сравнений с лайками, так как они медленнее.

2 голосов
/ 11 октября 2011

Тип данных 'text' будет замедлять ваши запросы только в том случае, если вы собираетесь фильтровать, используя этот столбец в предложении WHERE ваших операторов выбора.

SELECT textColumn
FROM table WHERE varcharColumn LIKE '%Spanner%'

можно оптимизировать проще, чем

SELECT varcharColumn
FROM table WHERE textColumn LIKE '%Spanner%'

однако

SELECT textColumn
FROM table WHERE integerColumn = 1

выполняет так же хорошо, как

SELECT varcharColumn
FROM table WHERE integerColumn = 1

Некоторые общие советы:

Как общее правиловам следует подумать о том, как ваши таблицы будут упорядочены в выходных данных (по дате или в алфавитном порядке?) и поместить индекс в этот столбец.

Если вы начинаете с проектирования БД, вы, как правило, должны иметь все своитаблицы, использующие первичный ключ INT, который также является вашим столбцом IDENTITY и кластеризованным индексом.Это означает, что таблицы будут физически упорядочены (на диске) по этому столбцу (как правило, по вашему идентификатору, такому как PersonID и т. Д.), Затем будут использоваться некластеризованные индексы для столбцов, которые вы собираетесь фильтровать, и упорядочивать по.

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

2 голосов
/ 11 октября 2011

Я не уверен, что текстовые столбцы намного медленнее, чем альтернативы .

Указание столбцов, которые должны быть возвращены, является хорошим выбором производительности, поскольку нет необходимости перемещать больше данных, чем необходимо по проводам.

Если вы правильно настроите свои индексы, вы добьетесь больших успехов.Лучшее улучшение производительности, чем использование текстовых столбцов, обойдется.

Если вы выполняете намного больше операций чтения из базы данных, чем записи, то индексы улучшат скорость чтения.

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

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