varchar или текст - производительность MySQL - PullRequest
1 голос
/ 26 января 2012

если у нас есть таблица такая:

create table x(
   id int primary key,
   something_else_1 int,
   something_else_2 int,
   something_else_3 int,

   char_data text, -- or varchar(1000)
);

эта таблица будет запрошена во всех полях, кроме char_data.

большинство запросов будут похожи на:

select id, something_else_1
from x
where something_else_2 = 2 and something_else_3 = 5;

вопрос в том, есть ли у нас индексы и т. Д.,

какая конфигурация будет лучше - текстовая или varchar.

Всего одна заключительная нота -

Я знаю, что могу разделить это на две таблицы, в этом случае покупка с разделением будет не лучшей идеей, поскольку все поля, кроме BLOB-объектов, будут иметь нечто вроде уникального индекса или аналогичного.

1 Ответ

2 голосов
/ 26 января 2012

эта таблица будет запрошена во всех полях, кроме char_data.

Тогда тип данных char_data не влияет на производительность . Только если вы выберете char_data, он будет использовать большую пропускную способность. Ничего другого.

Это не проблема. Потому что вы не используете в вашем sql. SELECT * станет медленным, но SELECT id, something_else_1 не сделает его медленным. WHERE id=2 and something_else_2=1 не имеет никакого эффекта, но WHERE char_data like '%charsequence%'. Пока вы не ищите в своей таблице char_data, вы в безопасности .
Кроме того, если вы все еще хотите искать по char_data, вам следует включить полнотекстовый поиск.

ALTER TABLE `x` ADD FULLTEXT(`char_data`); 

Примечание: Полнотекстовый поиск поддерживается только в движке таблиц MyISAM.

...