- SQL Server: максимальное количество строк в таблице
- 12 ответов
- Запрос по нахождению максимально количества строк
- Решение
- Решение
- Агрегатные функции SQL — SUM, MIN, MAX, AVG, COUNT
- Функция SQL SUM
- Функция SQL MIN
- Функция SQL MAX
- Функция SQL AVG
- Функция SQL COUNT
- Агрегатные функции вместе с SQL GROUP BY (группировкой)
SQL Server: максимальное количество строк в таблице
Я разрабатываю программное обеспечение, которое хранит много данных в одной из таблиц базы данных (SQL Server версии 8, 9 или 10). Скажем, в эту таблицу за день вставляется около 100 000 записей. Это около 36 миллионов записей в год. Из опасения, что я потеряю производительность, я решил создать новую таблицу каждый день (таблицу с текущей датой в ее названии), чтобы уменьшить количество записей в таблице.
не могли бы вы сказать мне, была ли это хорошая идея? Есть ли предел записи для Таблицы SQL server? Или вы знаете, сколько записей (более или менее) можно сохранить в таблице, прежде чем производительность значительно снизится?
12 ответов
трудно дать общий ответ на это. Это действительно зависит от ряда факторов:
- какой размер вашей строки
- какие данные вы храните (строки, блобы, цифры)
- что вы делаете со своими данными (просто держите их в архиве, регулярно запрашивайте)
- у вас есть индексы на таблице — сколько
- каковы ваши спецификации сервера
Как ответил в другом месте здесь, 100000 в день и таким образом, каждый стол является излишним — я бы предложил ежемесячно или еженедельно, возможно, даже ежеквартально. Чем больше таблиц у вас есть, тем больше кошмар обслуживания/запроса он станет.
- размер базы данных: 524,272 терабайт
- базы данных на экземпляр SQL Server: 32 767
- файловые группы на базу данных: 32,767
- файлы на базу данных: 32,767
- размер файла (данные): 16 терабайт
- размер файла (журнала): 2 терабайт
- строк в таблице: ограничено хранение
- таблицы на базу данных:ограничено количеством объектов в базе данных
У меня есть таблица из трех столбцов с чуть более чем 6 миллиардами строк в SQL Server 2008 R2.
мы запрашиваем его каждый день для создания поминутных диаграмм системного анализа для наших клиентов. Я не заметил никаких хитов производительности базы данных (хотя тот факт, что он растет
1 ГБ каждый день, делает управление резервными копиями немного более сложным, чем хотелось бы).
Обновление Июль 2016
24,5 миллиарда строк до того, как резервные копии стали достаточно большими, чтобы мы решили обрезать записи старше двух лет (
700 ГБ, хранящиеся в нескольких резервных копиях, в том числе на дорогих лентах). Стоит отметить, что производительность не была существенным мотиватором в этом решении (т. е. она все еще работала отлично).
для тех, кто пытается удалить 20 миллиардов строк из SQL Server, я настоятельно рекомендую в этой статье. Соответствующий код в случае ссылки умирает (читайте статью для полного объяснения):
Обновление Ноябрь 2016
Если вы планируете хранить столько данных в одной таблице: не делайте этого. Я настоятельно рекомендую вам рассмотреть возможность секционирования таблиц (вручную или со встроенными функциями, если вы используете Enterprise edition). Это делает удаление старых данных так же легко, как усечение таблицы один раз в неделю/месяц/и т. д.). Если у вас нет Enterprise (чего нет у нас), вы можете просто написать сценарий, который выполняется раз в месяц, удаляет таблицы старше 2 лет, создает таблицу следующего месяца и восстанавливает динамическое представление, объединяющее все таблицы разделов для удобства запросов. Очевидно, что «раз в месяц» и «старше 2 лет» должны определяться вами на основе того, что имеет смысл для вашего прецедента. Удаление непосредственно из таблицы с десятками миллиардов строк данных а) займет огромное количество времени и Б) заполнит журнал транзакций сотни или тысячи раз.
Я не знаю предела строки, но я знаю таблицы с более чем 170 миллионами строк. Вы можете ускорить его с помощью секционированных таблиц (2005+) или представлений, соединяющих несколько таблиц.
Я не знаю MSSQL конкретно, но 36 миллионов строк не велики для корпоративной базы данных — работа с базами данных мэйнфреймов, 100 000 строк звучит как таблица конфигурации для меня :-).
пока я не большой поклонник некоторые программного обеспечения Microsoft, это не Доступ, о котором мы говорим здесь: я предполагаю, что они могут обрабатывать довольно значительные размеры базы данных с помощью своей корпоративной СУБД.
Я подозреваю, что дни, возможно, были слишком тонким разрешением, чтобы разделить его вверх, если она вообще нуждается в разделении.
У нас есть таблицы в SQL Server 2005 и 2008 с более чем 1 миллиардом строк в нем (30 миллионов добавляется ежедневно). Я не могу представить, как спускаюсь в крысиное гнездо, разделяя его на новый стол каждый день.
гораздо дешевле добавить соответствующее дисковое пространство (которое вам все равно нужно) и ОЗУ.
Это зависит, но я бы сказал, что лучше держать все в одной таблице для простоты.
100,000 строк в день на самом деле не так уж много огромного количества. (В зависимости от оборудования сервера). Я лично видел, как MSSQL обрабатывает до 100M строк в одной таблице без каких-либо проблем. Пока вы держите свои индексы в порядке, все должно быть хорошо. Ключ должен иметь кучи памяти, так что индексы не должны быть заменены, чтобы диск.
с другой стороны, это зависит от того, как вы используете данные, если вам нужно сделать много запросов, и его маловероятные данные будут необходимы, которые охватывают несколько дней (поэтому вам не нужно будет присоединяться к таблицам), это будет быстрее, чтобы разделить его на несколько таблиц. Это часто используется в таких приложениях, как управление промышленным процессом, где вы можете читать значение, скажем, 50 000 инструментов каждые 10 секунд. В этом случае скорость чрезвычайно важна, но простота не.
мы переполняли целочисленный первичный ключ один раз (что составляет
2,4 миллиарда строк) в таблице. Если есть предел строки, вы вряд ли когда-нибудь достигнете его всего лишь 36 миллионов строк в год.
вы можете заполнить таблицу, пока у вас не будет достаточно места на диске. Для повышения производительности вы можете попробовать миграцию в SQL Server 2005, а затем разделить таблицу и поместить части на разные диски(если у вас есть конфигурация RAID, которая действительно может вам помочь). Секционирование возможно только в корпоративной версии SQL Server 2005. Вы можете посмотреть пример секционирования по этой ссылке: http://technet.microsoft.com/en-us/magazine/cc162478.aspx
также вы можете попробовать создать вид для наиболее часто используемых данных, что также является одним из решений.
надеюсь, что это помогло.
самая большая таблица, с которой я столкнулся на SQL Server 8 в Windows2003, была 799 миллионов с 5 столбцами. Но будет ли это доброй волей или нет, следует измерять против SLA и случая использования — например,загрузите 50-100,000, 000 записей и посмотрите, работает ли он по-прежнему.
Источник
Запрос по нахождению максимально количества строк
Добрый вечер.Не получается сделать запрос Вывести ФИО клиента, имеющего максимальное количество записей об услугах. .
Накидал Sql код
но он не выводит ФИО.Как можно подкорректировать запрос?
Вот диаграмма таблиц
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Запрос на выборку и подсчета количества строк
mysql_query(«SELECT * FROM таблица WHERE условие»,$db); Всего в таблице «таблица» 100 строк По.
Sql запрос для получения количества строк и имени таблицы
Здравствуйте ! Я хочу сделать такой запрос Select Count(*) From TableName Select @TableName По.
найти ошибку в коде по нахождению количества дней между двумя датами
пишет какую-то белеберду void Date::megdy() < unsigned int mday, mday2; cout 7
cygapb-007, этот запрос немного не корректен.он выводит просто все записи,а мне нужно лишь фио человека с наибольшим количеством записей.То есть у кого больше всего customerNumbers
Решение
Решение
Поиск максимально возможного количества элементов в массиве
не запускается не нравится 14 строка максимально возможное количество элементов в массиве.
Подсчёт количества символов и количества строк в файле
Нужно написать программу, которая запрашивает у пользователя имя (адрес) текстового файла, далее.
Максимально кол-во строк
Я изучаю javascript, jquery и у меня есть вопрос, как сделать так, чтобы новые элементы добавлялись.
Запрос данных с экрана максимально быстрый
Товарищи приветствую Вас! Помогите с проблемой Дело в том что, я раньше запрашивал пиксель на.
Источник
Агрегатные функции SQL — SUM, MIN, MAX, AVG, COUNT
Оглавление
- Функция SQL SUM
- Функция SQL MIN
- Функция SQL MAX
- Функция SQL AVG
- Функция SQL COUNT
- Агрегатные функции вместе с SQL GROUP BY (группировкой)
- Разрешены ли агрегатные функции от агрегатных функций?
Связанные темы
- Оператор SELECT
- GROUP BY — группировка в запросах
Назад >> |
Будем учиться подводить итоги. Нет, это ещё не итоги изучения SQL, а итоги значений столбцов таблиц базы данных. Агрегатные функции SQL действуют в отношении значений столбца с целью получения единого результирующего значения. Наиболее часто применяются агрегатные функции SQL SUM, MIN, MAX, AVG и COUNT. Следует различать два случая применения агрегатных функций. Первый: агрегатные функции используются сами по себе и возвращают одно результирующее значение. Второй: агрегатные функции используются с оператором SQL GROUP BY, то есть с группировкой по полям (столбцам) для получения результирующих значений в каждой группе. Рассмотрим сначала случаи использования агрегатных функций без группировки.
Функция SQL SUM
Функция SQL SUM возвращает сумму значений столбца таблицы базы данных. Она может применяться только к столбцам, значениями которых являются числа. Запросы SQL для получения результирующей суммы начинаются так:
После этого выражения следует FROM (ИМЯ_ТАБЛИЦЫ), а далее с помощью конструкции WHERE может быть задано условие. Кроме того, перед именем столбца может быть указано DISTINCT, и это означает, что учитываться будут только уникальные значения. По умолчанию же учитываются все значения (для этого можно особо указать не DISTINCT, а ALL, но слово ALL не является обязательным).
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .
Сначала работать будем с базой данных фирмы — Company1. Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными — в файле по этой ссылке .
Пример 1. Есть база данных фирмы с данными о её подразделениях и сотрудниках. Таблица Staff помимо всего имеет столбец с данными о заработной плате сотрудников. Выборка из таблицы имеет следующий вид (для увеличения картинки щёлкнуть по ней левой кнопкой мыши):
Для получения суммы размеров всех заработных плат используем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE company1;):
Этот запрос вернёт значение 287664,63.
А теперь упражнение для самостоятельного решения. В упражнениях уже начинаем усложнять задания, приближая их к тем, что встречаются на практике.
Пример 2. Вывести сумму комиссионных, получаемых всеми сотрудниками с должностью Clerk.
Функция SQL MIN
Функция SQL MIN также действует в отношении столбцов, значениями которых являются числа и возвращает минимальное среди всех значений столбца. Эта функция имеет синтаксис аналогичный синтаксису функции SUM.
Пример 3. База данных и таблица — те же, что и в примере 1.
Требуется узнать минимальную заработную плату сотрудников отдела с номером 42. Для этого пишем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE company1;):
Запрос вернёт значение 10505,90.
И вновь упражнение для самостоятельного решения. В этом и некоторых других упражнениях потребуется уже не только таблица Staff, но и таблица Org, содержащая данные о подразделениях фирмы:
Пример 4. К таблице Staff добавляется таблица Org, содержащая данные о подразделениях фирмы. Вывести минимальное количество лет, проработанных одним сотрудником в отделе, расположенном в Бостоне.
Функция SQL MAX
Аналогично работает и имеет аналогичный синтаксис функция SQL MAX, которая применяется, когда требуется определить максимальное значение среди всех значений столбца.
Пример 5. База данных и таблица — те же, что и в предыдущих примерах.
Требуется узнать максимальную заработную плату сотрудников отдела с номером 42. Для этого пишем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE company1;):
Запрос вернёт значение 18352,80
Пришло время упражнения для самостоятельного решения.
Пример 6. Вновь работаем с двумя таблицами — Staff и Org. Вывести название отдела и максимальное значение комиссионных, получаемых одним сотрудником в отделе, относящемуся к группе отделов (Division) Eastern. Использовать JOIN (соединение таблиц).
Функция SQL AVG
Указанное в отношении синтаксиса для предыдущих описанных функций верно и в отношении функции SQL AVG. Эта функция возвращает среднее значение среди всех значений столбца.
Пример 7. База данных и таблица — те же, что и в предыдущих примерах.
Пусть требуется узнать средний трудовой стаж сотрудников отдела с номером 42. Для этого пишем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE company1;):
Результатом будет значение 6,33
В следующем упражнении для самостоятельного решения помимо агрегатной функции требуется использовать также предикат BETWEEN.
Пример 8. Работаем с одной таблицей — Staff. Вывести среднюю зарплату сотрудников со стажем от 4 до 6 лет.
Функция SQL COUNT
Функция SQL COUNT возвращает количество записей таблицы базы данных. Если в запросе указать SELECT COUNT(ИМЯ_СТОЛБЦА) . то результатом будет количество записей без учёта тех записей, в которых значением столбца является NULL (неопределённое). Если использовать в качестве аргумента звёздочку и начать запрос SELECT COUNT(*) . то результатом будет количество всех записей (строк) таблицы.
Пример 9. База данных и таблица — те же, что и в предыдущих примерах.
Требуется узнать число всех сотрудников, которые получают комиссионные. Число сотрудников, у которых значения столбца Comm — не NULL, вернёт следующий запрос (на MS SQL Server — с предваряющей конструкцией USE company1;):
Результатом будет значение 11.
Пример 10. База данных и таблица — те же, что и в предыдущих примерах.
Если требуется узнать общее количество записей в таблице, то применяем запрос со звёздочкой в качестве аргумента функции COUNT (на MS SQL Server — с предваряющей конструкцией USE company1;):
Результатом будет значение 17.
В следующем упражнении для самостоятельного решения потребуется использовать подзапрос.
Пример 11. Работаем с одной таблицей — Staff. Вывести число сотрудников в отделе планирования (Plains).
Агрегатные функции вместе с SQL GROUP BY (группировкой)
Теперь рассмотрим применение агрегатных функций вместе с оператором SQL GROUP BY. Оператор SQL GROUP BY служит для группировки результирующих значений по столбцам таблицы базы данных. На сайте есть урок, посвящённый отдельно этому оператору.
Работать будем с базой данных «Портал объявлений 1». Скрипт для создания этой базы данных, её таблицы и заполения таблицы данных — в файле по этой ссылке .
Пример 12. Итак, есть база данных портала объявлений. В ней есть таблица Ads, содержащая данные об объявлениях, поданных за неделю. Столбец Category содержит данные о больших категориях объявлений (например, Недвижимость), а столбец Parts — о более мелких частях, входящих в категории (например, части Квартиры и Дачи являются частями категории Недвижимость). Столбец Units содержит данные о количестве поданных объявлений, а столбец Money — о денежных суммах, вырученных за подачу объявлений.
Category | Part | Units | Money |
Транспорт | Автомашины | 110 | 17600 |
Недвижимость | Квартиры | 89 | 18690 |
Недвижимость | Дачи | 57 | 11970 |
Транспорт | Мотоциклы | 131 | 20960 |
Стройматериалы | Доски | 68 | 7140 |
Электротехника | Телевизоры | 127 | 8255 |
Электротехника | Холодильники | 137 | 8905 |
Стройматериалы | Регипс | 112 | 11760 |
Досуг | Книги | 96 | 6240 |
Недвижимость | Дома | 47 | 9870 |
Досуг | Музыка | 117 | 7605 |
Досуг | Игры | 41 | 2665 |
Используя оператор SQL GROUP BY, найти суммы денег, вырученных за подачу объявлений в каждой категории. Пишем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
Результатом будет следующая таблица:
Category | Money |
Досуг | 16510 |
Недвижимость | 40530 |
Стройматериалы | 18900 |
Транспорт | 38560 |
Электротехника | 17160 |
Пример 13. База данных и таблица — та же, что в предыдущем примере.
Используя оператор SQL GROUP BY, выяснить, в какой части каждой категории было подано наибольшее число объявлений. Пишем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
Результатом будет следующая таблица:
Category | Part | Maximum |
Досуг | Музыка | 117 |
Недвижимость | Квартиры | 89 |
Стройматериалы | Регипс | 112 |
Транспорт | Мотоциклы | 131 |
Электротехника | Холодильники | 137 |
Итоговые и индивидуальные значения в одной таблице можно получить объединением результатов запросов с помощью оператора UNION.
Источник