Размер поля влияет на время запроса?

Мой вопрос касается MySQL, но я также задаюсь вопросом, как это влияет на другие базы данных. У меня есть несколько полей, которые, varchar(255)но мой коллега настаивает, были ли они varchar(30)или меньший размер, тогда запросы будут работать быстрее. Я не уверен, но если это так, я признаюсь в этом.

mysql,sql,database,

6

Ответов: 7


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

Для запросов SELECT сам оператор будет работать так же быстро в MySQL, и до тех пор, пока данные не получат больше, чем на поле меньшего размера, тогда он будет передавать так же быстро. Если меньшее поле заставляет вас хранить информацию в меньшем пространстве (можете ли вы использовать дополнительные 225 символов?), Вы получите быструю передачу в другие программы.

Для запросов INSERT размер поля не является проблемой, но использование полей переменной длины замедляет процесс. INSERT с фиксированной длиной строки заметно быстрее (по крайней мере, в MySQL 5.0 и ранее).

Как правило, используйте необходимый размер данных. Если вы не знаете, нужно ли вам 255 символов или 30 символов, вы, вероятно, оптимизируете слишком рано. Большие поля данных вызывают узкое место? Есть ли у вас программа, которая страдает от проблем с производительностью базы данных? Сначала найдите свои узкие места, разрешите проблему с ними во-вторых. Я предполагаю, что разница во времени, которую вы смотрите здесь, не имеет значения для любой проблемы, которую вы пытаетесь решить.


4

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

Но во время запросов есть некоторые обстоятельства, когда MySQL конвертирует VARCHAR в CHAR - и, следовательно, размер увеличивается до максимальной длины. Это происходит, например, когда MySQL создает временную таблицу во время операций JOIN или ORDER BY или GROUP BY.

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

Короткий ответ: да, может быть разница, используете ли вы VARCHAR (255) или VARCHAR (30). Поэтому определите максимальную длину столбца в соответствии с тем, что вам нужно, а не «большой» длиной, например, 255 для традиции.


1

Поскольку вы спрашивали о других базах данных ...

Это АБСОЛЮТНО влияет на время запроса.

В Oracle, когда данные перемещаются с сервера на клиент, это делается через буфер. Ничего революционного нет. Количество строк, помещенных в этот буфер, зависит от максимального размера строки. Скажем, ваш запрос возвращает 4 столбца varchars. Если размер столбцов равен 100, и он должен быть равен 10, Oracle будет в 10 раз меньше строк в каждой выборке, чем в противном случае с помощью определений столбцов в правом размере. Это приводит к тому, что блоки перечитываются без необходимости. Это заставляет больше сетевого трафика, больше круглых поездок.

В Oracle вы можете изменить размер буфера с помощью SET ARRAYSIZE. Попробуйте это сделать, сделайте запрос с одним размером, а затем сделайте это снова с 10% пространства. Вы увидите, что чтение идет вверх, сетевые поездки идут вверх, а производительность снижается. Создание столбцов слишком велико, так же, как сделать этот буфер слишком малым.

Но настоящая причина для столбцов с точным размером - это целостность данных. Вы держите плохие вещи. Это так же важно, как и производительность.

Запомнить:

  • Ita € ™ s никогда не слишком рано, чтобы проектировать для производительности
  • 99% того, что вы говорите, вернулись, вы не выиграли
  • Ita € ™ s намного легче, лучше и дешевле, чтобы получить что-то право в первый раз.

0

Если вы используете только первые 30 символов, тогда не будет разницы между varchar (30) и varchar (255) (хотя была бы разница с varchar (1000), что потребовало бы дополнительного байт).

Конечно, если вы закончите использовать более 30 символов, это будет медленнее, так как у вас будет больше данных для передачи клиенту, а ваши индексы будут больше.


0

Очень редко ширина столбца влияет на производительность запросов. Конечно, если вы используете более крупные объекты (BLOB, LONGBLOB, TEXT, LONGTEXT), существует вероятность того, что многие данные будут вытащены. Это может повлиять на производительность, но это не обязательно. Это действительно влияет только на хранение. Если вам нужен размер хранилища по типу данных, вы можете обратиться к http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html, чтобы узнать подробности.

И повторить: размер хранилища данных не обязательно влияет на скорость запросов. Есть много других соображений дизайна, которые будут влиять на скорость запросов. Проектирование таблиц и отношений, ключевой структуры, индексов, архитектуры запросов и объединений и т. Д.

MySQL, MS SQL, базы данных,
Похожие вопросы