Как я могу оптимизировать мой столбец varchar (max)? - PullRequest
0 голосов
/ 21 сентября 2019

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

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

Чтобы получить только личные данные, запрос занимает одну секунду.Чтобы вытащить изображения, я просматриваю более 6 секунд для 5 записей.

Столбец имеет тип varchar(max), и размер данных варьируется.Вот пример длины данных:

28171
4925543
144881
140455
25955
630515
439299
1700483
1089659
1412159
6003
4295935

Есть ли способ оптимизировать выборку этих данных?Мой запрос выглядит следующим образом:

SELECT * 
FROM userProfile 
ORDER BY id

Индексирование исключено из-за длин данных.Должен ли я смотреть на сжатие изображений перед сохранением?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019
  1. Если все еще возможно сделать один шаг назад. Отбросьте идею Хранения изображений в таблице.Вместо этого сохраните путь в БД и изображение в папке. Это наиболее эффективно.
  2. SELECT * FROM userProfile ORDER BY id

Не используйте * и почему выиспользуя order by?Вы можете order by В UI код

0 голосов
/ 21 сентября 2019

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

Я бы рекомендовал сжать данные, если время поиска так важно.Возможно, вам удастся извлечь и распаковать данные быстрее, чем читать несжатые данные.

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

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