Лучшая цена для хранения группы дат по месяцам.

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

  1. Два целых столбца один год для другого в течение месяца (понятный и сильный для манипулирования (любой, кто использует эту таблицу, может легко использовать диапазоны и заказы), но я думаю, что это займет больше места, чем другое решение.
  2. Используйте поле «Дата» и всегда сохраняйте одну дату в течение всего месяца. (Трудно объяснить пользователям, как это работает и как создавать предложения WHERE)
  3. Одна колонка varchar (7) и помещайте там укусы, такие как 2012-02,2013-01. Для меня это легко понять, но трудно манипулировать.

Что я должен выбрать? или есть другое решение. Может кто-то предложить в соответствии с производительностью, который будет хорошим решением, потому что большинство запросов будет использовать диапазон данных, где решение и моя новая таблица будут иметь около 2-5 миллионов записей.

6 голосов | спросил adopilot 12 MarpmMon, 12 Mar 2012 12:23:50 +04002012-03-12T12:23:50+04:0012 2012, 12:23:50

2 ответа


2

Я думаю, вы должны выбрать один (или несколько) вариантов в зависимости от того, как данные должны быть извлечены .

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

(1) Две целые столбцы: Это отличный подход к использованию, если вам нужно сравнивать месяцы с разных лет. Извлечение по месяцам и сортировка по году будут намного быстрее, если вы укажете год и месяц отдельно. Вариант 1 лучше всего, если это важный или частый способ использования данных. С другой стороны, этот режим ужасен при извлечении диапазонов, отличных от лет и месяцев. Например, это не хорошо для диапазонов, которые пересекают годы. Предложение WHERE может стать более сложным, чем вам хотелось бы, когда диапазон дат пересекает границы календарного года. (Думайте с ноября 2011 года по февраль 2012 года.)

(2) Поле даты: Вы и gbn указали хорошие точки в этом формате. Он также хорош для сортировки в хронологическом порядке и для извлечения диапазонов месяцев. Это наиболее компактное представление (всего 3 байта). Это не очень хорошо для сравнения, как месяцев в разные годы, и это не идея для отображения на экранах и отчетах.

(3) char (7) YYYY-MM Поле: Обратите внимание, что если вы действительно обеспокоены пространством (а вы не должны быть в вашем случае), то вы можете использовать char вместо varchar с каждый элемент будет иметь известную длину. Использование YYYY-MM подходит для сортировки и фильтрации. Это не так хорошо, как (2) для пространства, но лучше для отображения и простоты предложения WHERE - если вам не нужно извлекать такие же месяцы в течение нескольких лет.


Возможно, вы заметили, что существует разница между (1) и (2) /(3), когда речь заходит о природе экстракции, которую вам нужно сделать. Если вам нужно делать как месячные, так и месячные, то ни один из этих вариантов не идеален. Если это так, я бы посоветовал вам рассмотреть возможность использования комбинации (1) и (2) или (3) - я сам выбрал (3), поскольку я бы оценил удобство отображения /использования по сравнению с хранилищем пространство. Если вы используете комбинацию, сделайте один или другой вычисленный столбец (столбцы) и проиндексируйте его для эффективного извлечения.

ответил Joel Brown 12 MarpmMon, 12 Mar 2012 15:48:57 +04002012-03-12T15:48:57+04:0003 2012, 15:48:57
1

Рассмотрим моделирование как период с двумя значениями даты - начальной датой и датой окончания - с использованием открытого открытого представления («открытое» означает, что конечная дата фактически не встречается в периоде).

Например, текущий месяц (март 2012 г.) будет смоделирован с использованием строки

(start_date, end date) VALUES ('2012-03-01T00:00:00', '2012-04-01T00:00:00')
ответил onedaywhen 12 MarpmMon, 12 Mar 2012 18:05:33 +04002012-03-12T18:05:33+04:0006 2012, 18:05:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132