2010-08-06 5 views
1

Я читал много раз, что нам нужно избегать чтения слишком большого количества полей при запросе MySQL (или любой базы данных) ... просто запросите нужные поля.Сколько полей слишком много при запросе MySQL?

Однако у меня есть проект, в котором таблица содержит 100 полей на запись/строку.

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

В конечном итоге у меня будет около 200 пользователей, которые будут использовать один и тот же запрос/таблицу. На данный момент я провел некоторое непрерывное тестирование с 3 ПК одновременно, постоянно запрашивая базу данных, и проблем с производительностью вообще нет, все данные запрашиваются на долю секунды. Также обратите внимание, что запросы во много раз совпадают (все пользователи запрашивают одно и то же), поэтому кэш запросов очень сильно ударяется.

Но меня беспокоит, когда все пользователи (+200) связаны друг с другом и связаны с проектом в производстве у меня начнутся проблемы с производительностью.

Итак ... вопрос, - 100 полей, которые слишком много для запроса?

Может SELECT * ... использоваться или будет ВЫБРАТЬ field1, поле2, field3 ... и т.д. быть быстрее?

Я не знаю, как «имитировать» 200 пользователей, запрашивающих в то же время ... любые идеи?

благодаря

+0

«100 полей слишком много для запроса?» Вы протестировали его, и в вашем случае ответ будет ** нет **. «будет SELECT поле1, поле2, поле3 ... и т. д. быстрее?» И поиск, что '*' подразумевает и анализирует все поля, если упоминается отдельно, требует времени, но это ничто по сравнению с фактическим запросом. – MvanGeest

+0

благодарит за комментарии. Я не уверен, что вы имеете в виду «* подразумевает разбор ...».Вы говорите, что лучше использовать * (в данном случае) или лучше сделать запрос, перечисляющий каждое отдельное поле? – griseldas

ответ

3

Некоторые идеи можно найти here.

Если у вас 200 пользователей, вы, вероятно, не пострадали бы слишком много, если только они не решит действовать сообща. Тем не менее, я бы, вероятно, спросил, действительно ли мне нужно 100 полей, или если база данных может быть нормализована. Если это то, что вам нужно, это то, что вам нужно.

+0

+1 Стол со 100 полями дает неприятный запах кода. :-) –

+0

Поверьте мне в этом, я посмотрел на уменьшение количества полей, однако это невозможно. Хотя не все записи используют все 100 полей, большинство из них используют между 50-60, около 75+ и несколькими полными 100. У меня нет большого опыта работы с mysql, но я действительно подумал об этом и Не знаю, как сделать это менее 100 полей – griseldas

+0

спасибо Amadan за ссылку! – griseldas

0

Я смиренно предлагаю вам изучить нормализацию базы данных. Вы можете разделить эту запись.

http://en.wikipedia.org/wiki/Database_normalization

http://databases.about.com/od/specificproducts/a/normalization.htm

MySQL специально.

http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html

Также он считается плохой форме использовать «выберите *» в рабочем коде. Лично, если мне действительно нужно все поле, я использую его. YMMV.

НТН

Основываясь на ваш комментарий, что вы не можете побить рекорд до: исследование SQL «присоединяется» и «подзапросов». Вы полюбите их. :-)

+0

Если вам нужно каждое поле, 'SELECT *' все еще проблема, потому что в следующий раз вы добавите что-то в в базе данных вы должны найти все эти места, а не просто добавить свой новый столбец в те места, которые, как вы знаете, будут использоваться. –

+0

спасибо за ссылку и комментарии. Но если я делю запись на 4 разные таблицы, но мне нужны все поля для вычислений, мне все равно придется запрашивать все 25 полей в каждой из 4 таблиц, чтобы иметь все необходимые мне данные, правильно? – griseldas

+0

@Brendan: достаточно справедливо. :) – JustBoo

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