SQL Server: максимальное количество строк в таблице

Краткий ответ на ваш вопрос: да.

Запуск model.is_active = false сам по себе не сохранит изменение в базе данных. Попробуйте заново извлечь запись из базы данных после запуска model.is_active = false, и вы увидите, что значение фактически не изменилось; вам также нужно запустить model.save, чтобы сделать это.

Однако для подобных сценариев (при условии, что вы хотите немедленно сохранить изменения в записи!) Есть более краткий способ сохранения данных вместо выполнения двух команд:

model.update_attribute(:is_active, false)

Это будет обновите значение в базе данных, если проверки пройдены, а также выполните любые обратные вызовы (например, after_save).

Если вы хотите обновить значение без выполнения проверок и обратных вызовов (что обычно быстрее, но более «опасно»), тогда вы можете вместо этого использовать:

model.update_column(:is_active, false)
73
задан A-Sharabiani 21 March 2017 в 17:45
поделиться

6 ответов

Трудно дать общий ответ на это. Это действительно зависит от ряда факторов:

  • какого размера ваша строка
  • , какого рода данные вы храните (строки, BLOB-объекты, числа)
  • , что вы делаете со своими данными (просто сохраняйте их как архив, запрашивайте это регулярно)
  • есть ли у вас индексы на вашей таблице - сколько
  • каковы ваши серверные спецификации

и т. д.

Как ответили здесь в другом месте, 100 000 в день и, следовательно, для каждой таблицы излишне - я бы предложил ежемесячно или еженедельно, возможно, даже ежеквартально. Чем больше у вас таблиц, тем больше будет кошмар обслуживания / запроса.

34
ответ дан 24 November 2019 в 12:09
поделиться

Я не знаю предела строк, но я знаю таблицы с более чем 170 миллионами строк. Вы можете ускорить его, используя многораздельные таблицы (2005+) или представления, которые соединяют несколько таблиц.

19
ответ дан 24 November 2019 в 12:09
поделиться

Я не знаю конкретно MSSQL, но 36 миллионов строк невелики для базы данных предприятия - работа с базами данных мэйнфреймов Для меня 100 000 строк звучит как таблица конфигурации: -).

Хотя я не большой поклонник некоторых программного обеспечения Microsoft, это не Access, о котором мы здесь говорим: I предположим, что они могут справляться с довольно существенными размерами баз данных с помощью своих корпоративных СУБД.

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

19
ответ дан 24 November 2019 в 12:09
поделиться

It depends, but I would say it is better to keep everything in one table for that sake of simplicity.

100,000 rows a day is not really that much of an enormous amount. (Depending on your server hardware). I have personally seen MSSQL handle up to 100M rows in a single table without any problems. As long as your keep your indexes in order it should be all good. The key is to have heaps of memory so that indexes don't have to be swapped out to disk.

On the other hand, it depends on how you are using the data, if you need to make lots of query's, and its unlikely data will be needed that spans multiple days (so you won't need to join the tables) it will be faster to separate out it out into multiple tables. This is often used in applications such as industrial process control where you might be reading the value on say 50,000 instruments every 10 seconds. In this case speed is extremely important, but simplicity is not.

4
ответ дан 24 November 2019 в 12:09
поделиться

You can populate the table until you have enough disk space. For better performance you can try migration to SQL Server 2005 and then partition the table and put parts on different disks(if you have RAID configuration that could really help you). Partitioning is possible only in enterprise version of SQL Server 2005. You can look partitioning example at this link: http://technet.microsoft.com/en-us/magazine/cc162478.aspx

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

Надежда это помогло ...

2
ответ дан 24 November 2019 в 12:09
поделиться
SELECT Top 1 sysobjects.[name], max(sysindexes.[rows]) AS TableRows, 
  CAST( 
    CASE max(sysindexes.[rows]) 
      WHEN 0 THEN -0 
      ELSE LOG10(max(sysindexes.[rows])) 
    END 
    AS NUMERIC(5,2)) 
  AS L10_TableRows 
FROM sysindexes INNER JOIN sysobjects ON sysindexes.[id] = sysobjects.[id] 
WHERE sysobjects.xtype = 'U' 
GROUP BY sysobjects.[name] 
ORDER BY max(rows) DESC
-1
ответ дан 24 November 2019 в 12:09
поделиться
Другие вопросы по тегам:

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