varchar (макс.) везде?

Есть ли какая-либо проблема с созданием всех Ваших строковых столбцов SQL-сервера 2008 года varchar (макс.)? Моими допустимыми размерами строки управляет приложение. База данных должна просто сохранить то, что я даю ей. Я получу удар производительности, объявляя, что все строковые столбцы имеют тип varchar (макс.) в SQL-сервере 2008, независимо от того, что размер данных, которые на самом деле входят в них?

80
задан Luke Girvin 23 February 2018 в 11:24
поделиться

3 ответа

Индексы не могут быть более 900 байтами шириной для одного. Таким образом, вы, вероятно, никогда не можете не создать индекс. Если ваши данные меньше, чем 900 байтов, используйте Varchar (900).

Это один недостаток: поскольку он дает

  • действительно плохие показатели поиска
  • без уникальных ограничений
33
ответ дан 24 November 2019 в 10:00
поделиться

Это решение crossbrowser, на которое я смотрел некоторое время назад, что работает на клиенте и с помощью jQuery:

(function($) { 
  $.fn.breakWords = function() { 
    this.each(function() { 
      if(this.nodeType !== 1) { return; } 

      if(this.currentStyle && typeof this.currentStyle.wordBreak === 'string') { 
        //Lazy Function Definition Pattern, Peter's Blog 
        //From http://peter.michaux.ca/article/3556 
        this.runtimeStyle.wordBreak = 'break-all'; 
      } 
      else if(document.createTreeWalker) { 

        //Faster Trim in Javascript, Flagrant Badassery 
        //http://blog.stevenlevithan.com/archives/faster-trim-javascript 

        var trim = function(str) { 
          str = str.replace(/^\s\s*/, ''); 
          var ws = /\s/, 
          i = str.length; 
          while (ws.test(str.charAt(--i))); 
          return str.slice(0, i + 1); 
        }; 

        //Lazy Function Definition Pattern, Peter's Blog 
        //From http://peter.michaux.ca/article/3556 

        //For Opera, Safari, and Firefox 
        var dWalker = document.createTreeWalker(this, NodeFilter.SHOW_TEXT, null, false); 
        var node,s,c = String.fromCharCode('8203'); 
        while (dWalker.nextNode()) { 
          node = dWalker.currentNode; 
          //we need to trim String otherwise Firefox will display 
          //incorect text-indent with space characters 
          s = trim( node.nodeValue ).split('').join(c); 
          node.nodeValue = s; 
        } 
      } 
    }); 

    return this; 
  }; 
})(jQuery); 
-121--1832786-

для ruby, электронная таблица gem отлично читать запись modify,... Экс-камера файлы

https://github.com/zdavatz/spreadsheet

-121--3765907-

В идеале, Это означает, что если вы уверены, что конкретный столбец (скажем, столбец имени пользователя) никогда не будет длиннее 20 символов, использование VARCHAR (20) или VARCHAR (MAX) позволяет базе данных оптимизировать запросы и структуры данных.

От MSDN: http://msdn.microsoft.com/en-us/library/ms176089.aspx

Variable-length, non-Unicode character data. n can be a value from 1 through 8,000. max indicates that the maximum storage size is 2^31-1 bytes.

Вы действительно собираетесь приблизиться к 2 ^ 31-1 байт для этих столбцов?

1
ответ дан 24 November 2019 в 10:00
поделиться

Саймон Сабин написал сообщение на это некоторое время назад. У меня сейчас нет времени, чтобы схватить его сейчас, но вы должны искать его, потому что он подходит с выводом, что вы не должны использовать Varchar (Max) по умолчанию.

Отредактировано: Simon получил несколько постов о Varchar (Max). Ссылки в комментариях ниже показывают это довольно красиво. Я думаю, что самый значительный - это http://sqlblogcasts.com/blogs/simons/Archive/2009/07/11/string-concatenation-with-max-types-stops-plan-caching.aspx , который рассказывает о влиянии варечана (макс) на кэширование плана. Общий принцип должен быть осторожен. Если вам не нужно, чтобы он был максимальным, то не используйте MAX - если вам нужно больше 8000 символов, то, конечно, ... пойти на него.

9
ответ дан 24 November 2019 в 10:00
поделиться
Другие вопросы по тегам:

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