MySQL скорость запроса - PullRequest
3 голосов
/ 31 июля 2009

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

A. Хранение данных в одной таблице с более чем 20+ столбцами

ИЛИ

B. Распределение данных в две таблицы по 15 и 6 столбцов в каждой

еще одна вещь, даже если я распространю данные, мне все равно, возможно, придется обращаться к обеим таблицам одновременно в 60% случаев ...

Итак, какая лучшая ставка из двух ...

Спасибо

Ответы [ 3 ]

2 голосов
/ 31 июля 2009

A JOIN, даже на PRIMARY KEY, требует в несколько раз больше времени, чем последовательное сканирование.

Конечно, лучше посмотреть таблицу, но я считаю, что лучше держать их вместе.

Если столбцы, которые вы хотите разделить, маленькие и имеют большую мощность (много разных значений), то оставьте их в таблице.

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

Например, если ваши данные выглядят так:

id  value

1   Really really long value 1
2   Really really long value 1
3   Really really long value 1
…
1000   Really really long value 2
1001   Really really long value 2
1002   Really really long value 2
…

сканирование этой таблицы занимает много времени, так как значения большие.

Нормализация таблицы даст следующее:

id  value

1   1
2   1
3   1 
…
1000   2
1001   2
1002   2
…

val_id  value
1       Really really long value 1
2       Really really long value 1

Сканирование строк с 4 -байтовыми целыми числами выполняется намного быстрее, чем VARCHAR с тысячными байтами, и запрос во втором исполнении будет выполняться быстрее, даже несмотря на дополнительные JOIN.

1 голос
/ 31 июля 2009

Без предоставления нам более подробной информации наши ответы не могут быть окончательными. Будете ли вы разбивать столбцы, чтобы избежать дублирования? Если это так, вы, вероятно, увидите увеличение скорости для простых запросов. Однако, если у вас есть запросы, которые включают сложные объединения, вы можете увидеть снижение производительности. Многое зависит от того, как вы индексируете свои таблицы тоже.

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

Я предлагаю прочитать how-do-i-ask-for-help-оптимизация-исправление-запросов-в-mysql в stackoverflow, чтобы узнать, как обращаться за помощью по MySQL.

1 голос
/ 31 июля 2009

Я думаю, это зависит от схемы базы данных. Если есть только небольшие поля, метод A, вероятно, лучше. Но если есть большие поля, которые можно поместить в менее используемую таблицу, возможно, имеет смысл хранить их отдельно, как предложено в методе B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...