наверху varchar (макс.) столбцы с маленькими данными

Вы можете использовать переключение окна KSQL :

Создать поток сенсорной информации;

CREATE STREAM sensorinformation \
  (sensorid VARCHAR, \
   sensortimestamp BIGINT, \
   value VARCHAR) \
 WITH (KAFKA_TOPIC='sensorinformationtopic', \
       VALUE_FORMAT='DELIMITED', \
       KEY='sensorid', \
       TIMESTAMP='sensortimestamp');

И, наконец, создайте таблицу, содержащую неисправные датчики, которые появляются только один раз в течение временного окна в 10 секунд:

CREATE TABLE faulty_sensors AS \
  SELECT sensorid, \
         count(*) \
  FROM sensorinformation \
  WINDOW TUMBLING (SIZE 10 SECONDS) \
  GROUP BY sensorid \
  HAVING count(*) = 1;

14
задан Ralph Shillington 13 May 2009 в 14:21
поделиться

5 ответов

Значения столбца VARCHAR (MAX) будут храниться в строке таблицы, если позволяет пространство. Поэтому, если у вас есть одно поле VARCHAR (MAX) и его размер составляет 200, 300 байт, скорее всего, оно будет храниться вместе с остальными вашими данными. Здесь нет проблем или дополнительных накладных расходов.

Только тогда, когда все данные одной строки не могут поместиться на одной странице SQL Server (8 КБ), только тогда SQL Server переместит данные VARCHAR (MAX) на страницы переполнения.

В общем, я думаю, вы получаете лучшее из обоих миров - встроенное хранилище, когда возможно, и переполнение хранилища, когда необходимо.

Марк

PS: Как указывает Митч, это поведение по умолчанию можно отключить - Однако я не вижу веских причин для этого ....

18
ответ дан 1 December 2019 в 10:19
поделиться

Накладные расходы на хранение одинаковы для varchar (n) и varchar (max) Размер хранилища - это фактическая длина введенных данных + 2 байта

Ссылка MSDN

Ознакомьтесь с этими аналогичными вопросами SO:

https://stackoverflow.com/questions/166371/varcharmax-versus-varcharn-in -ms-sql-server Есть ли недостатки в постоянном использовании nvarchar (MAX)?

6
ответ дан 1 December 2019 в 10:19
поделиться

Что ж, я хочу сказать, что не должно быть таких больших накладных расходов, потому что я не думаю, что sql автоматически назначает выделенный объем данных для nvarchar, а вместо этого выделяет только то, что необходимо для того, что вставлено, но у меня нет ничего, чтобы подтвердить или подтвердить эту идею.

-1
ответ дан 1 December 2019 в 10:19
поделиться

Насколько мне известно, накладные расходы, о которых вы, вероятно, думаете (хранение данных вне строки таким же образом, как ТЕКСТ или ДВОИЧНОЕ значение хранятся на сервере sql), применяются только если размер данных превышает 8000 байт. Так что не должно возникнуть проблем с использованием этого с меньшими столбцами для процессов ETL.

3
ответ дан 1 December 2019 в 10:19
поделиться

Если вы используете varchar ( max) или varbinary (max) в MSSQL2005 SSIS создает временный файл для каждого столбца в вашей записи, это может снизить производительность и стать большой проблемой. MS утверждает, что они решили эту проблему в MSSQL2008.

0
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: