2010-12-27 4 views
2

MYSQL документация говорит, что это:.MYSQL руководство проблема VARCHAR с частыми обновлениями

«Для MyISAM таблиц, которые часто изменяются, вы должны стараться избегать все столбцы переменной длины (VARCHAR, BLOB и TEXT) В таблице используется динамическая .. формат строки, если она включает в себя хотя бы один столбец переменной длины смотрите в разделе Глава 13, Хранение Двигатели "

в таблице я строю будет: 1-й столбец: автоматическое увеличивающиеся INT, установить в качестве первичного ключа Then 20 столбцов Varchar (255) 3 миллиона строк

В столбцах varchar будет введен текст, обычно около 100 символов, но в редких случаях может быть введено до 255 символов. Каждое чтение таблицы также выполняет обновление (данные считываются, обрабатываются, а затем обновляются по новой информации), поэтому в таблице много изменений. Но является ли это тем же изменением, о котором говорится в статье выше?

Мне сказали, что это не учебник, но он построен только для скорости, и все в порядке. поэтому вопрос заключается в том, означает ли ручная цитата выше, что я должен использовать Char (255) вместо varchar для моих нужд?

+0

Возможно, вы захотите уточнить: читаете ли вы/обновляете одну строку за раз или много строк за раз? Какие индексы у вас есть на этой таблице? Каков пример некоторых запросов SELECT/UPDATE, которые вы используете? – TehShrike

+0

Да, чтение/обновление по 1 строке за раз, 1-й столбец - индекс первичного ключа. SELECT * FROM table1 WHERE id = 'id'. подобное однострочное обновление, в ту же строку после обработки. – David19801

+0

Ack, обновленная информация о каждом чтении! О, вы задаете правильные вопросы о форматах строк и тому подобное. Продолжайте, хе-хе –

ответ

0

Это изменение, о котором говорится в статье. Char (255) должен обеспечивать лучшую производительность, но это будет стоить дисковое пространство 255 байт (фактическая длина данных). Также, если вы это сделаете, вам также может потребоваться добавить триммеры к вашему коду клиента. Согласно documentation

Когда значения CHAR хранятся, они имеют право дополняются пробелами до заданной длины. Когда значения CHAR извлекаются, конечные пробелы удаляются.

Таким образом, нет никаких проблем в отношении пробелов, если вы не используете binary strings.

For binary strings, all characters are significant in comparisons, 
including trailing spaces: 

mysql> SET NAMES binary; 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT 'a ' = 'a'; 
+------------+ 
| 'a ' = 'a' | 
+------------+ 
|   0 | 
+------------+ 
1 row in set (0.00 sec) 
+0

Что такое планки? – David19801

+0

Trim удаляет пробелы с начала и конца строк. Насколько я знаю, у каждого языка есть функция, которая делает это. Здесь находится mysql http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim. Вы также можете сделать это в своем коде клиента (например, PHP, Java, .NET). –

+0

Каким будет его использование здесь? Текстовые строки, вводимые в таблицу, обычно составляют от 100 до 255 символов и не имеют пробелов в начале или конце ... – David19801

Смежные вопросы