Каковы лучшие методы оптимизации производительности SQL Server? [закрытый]

Первые два имеют тот же эффект.

  1. объявляют переменную array1_OfStrings, позволяют выбрать сам тип. Когда он видит [String](), он умело знает, что это тип массива строки.
  2. Вы устанавливаете переменную array2_OfStrings как тип массива строки, тогда вы говорите, что она пуста []
  3. Это другое, потому что вы просто говорите, хотите, чтобы array3_OfStrings был типом массива строки, но не дал ему начальное значение.

Я думаю, что первый рекомендуется как Язык Swift Programming использует его чаще.

17
задан Ray Vega 12 October 2008 в 22:47
поделиться

13 ответов

Мой подход должен собрать команды против сервера или базы данных в таблицу с помощью SQL Server Profiler. После того как у Вас есть это, можно запросить на основе макс. и в среднем время выполнения, макс. и в среднем процессорное время, и (также очень важный) количество раз, что запрос был выполнен.

, Так как я пытаюсь поместить весь код доступа к базе данных в хранимые процедуры, для меня легко вспыхнуть запросы. При использовании встроенного SQL, это могло бы быть более твердо, так как изменение в значении в запросе заставило бы его быть похожим на другой запрос. Можно попытаться работать вокруг этого использования оператора LIKE для помещения тех же типов запросов в те же блоки для вычисления агрегатов (макс., в среднем, количество).

, После того как у Вас есть "лучшие 10" списков потенциальных проблем, которые можно начать смотреть на них индивидуально, чтобы видеть, может ли или запрос быть переделан, индекс мог бы помочь, или создание незначительного изменения архитектуры в порядке. Для предложения лучших 10 попытайтесь смотреть на данные по-разному: в среднем * значат общую стоимость в течение периода, макс. для худшего преступника, просто в среднем, и т.д.

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

Удачи!

11
ответ дан 30 November 2019 в 12:14
поделиться

План выполнения SQL Server!!! Пойдите сюда: http://dbalink.wordpress.com/2008/08/08/dissecting-sql-server-execution-plans-free-ebook/

5
ответ дан 30 November 2019 в 12:14
поделиться

"преждевременная оптимизация является корнем всего зла"

С точки зрения программирования базы данных, я думаю, что эта кавычка не имеет смысла. Чрезвычайно дорого переписать Ваше целое приложение, потому что Ваши разработчики не хотят написать эффективный код в первый раз. Весь t-код-SQL должен думаться с точки зрения того, как он будет влиять на вторую производительность базы данных (целостность данных, конечно, сначала). Perfomance должен превзойти все кроме целостности данных.

Да, существуют вещи оптимизации, которые Вы не должны делать, пока у Вас нет проблем, но некоторые вещи должны быть сделаны как само собой разумеющееся и не починены позже. Не требуется больше времени для написания кода, который имеет лучший шанс того, чтобы быть эффективным, чем код, который не будет, после того как Вы понимаете, как Вы влияете на эффективность с плохим кодом. Обсуждение Cervo кода курсора является одним примером. Основанные на наборе действия почти всегда намного быстрее, чем решения для курсора, таким образом, курсоры никогда не должны писаться первоначально, когда основанное на наборе решение сделает. Почти всегда мне требуется меньше времени для записи основанного на наборе решения, что это было бы для записи курсора, но единственный способ получить тот путь никогда не состоит в том, чтобы писать курсоры.

И нет никакой причины когда-либо использовать выбор * вместо того, чтобы указать Ваши имена полей. В MSSQL можно перетащить те имена из обозревателя объектов, таким образом, Вы не можете сказать мне, что слишком трудно сделать это. Но путем определения только полей Вам на самом деле нужно, Вы сохраняете сетевые ресурсы и ресурсы сервера базы данных и ресурсы веб-сервера. Итак, почему программист должен когда-либо выбирать ленивый вариант выбора * и беспокойство об оптимизации позже?

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

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

11
ответ дан 30 November 2019 в 12:14
поделиться

После того, как Вы представите, поместите запросы, Вы видите как неприятные в SQL Query Analyzer и отображаете план выполнения. Определите части запросов, которые выполняют дорогостоящие сканирования таблицы и повторно индексируют те таблицы для уменьшения этой стоимости.

Попытка эти ссылки:

SQL
Оптимизации, Как Оптимизировать Запросы

2
ответ дан 30 November 2019 в 12:14
поделиться

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

, Который скажет Вам точно, где необходимо сфокусироваться

1
ответ дан 30 November 2019 в 12:14
поделиться

профилирование является ключевым, но когда использование профилирования установило Вас, ДОЛЖНО быть уверено, что это - точный набор тестов данных, иначе настраивающие инструменты не смогут получить Вас точный результат, что необходимо.

Также объекты управления с фрагментацией использование, сообщающее в 2005, очень полезны!

1
ответ дан 30 November 2019 в 12:14
поделиться

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

я видел приложение, где кто-то загрузил всю таблицу базы данных событий клиенту и затем прошел каждую строку, один за другим фильтрующую на основе некоторых критериев. Было ОГРОМНОЕ увеличение производительности мимоходом, критерии фильтра к базе данных и наличию запроса применяют критерии в где пункт. Это очевидно для людей, которые работают с базами данных, но я видел, что подобные вещи неожиданно возникают. Также у некоторых людей есть запросы, которые хранят набор временных таблиц, полных строк, в которых они не нуждаются, которые затем устраняются в заключительном соединении временных таблиц. В основном, если Вы устраняете из запросов, которые заполняют временные таблицы затем существует меньше данных для остальной части запроса, и целый запрос работает быстрее.

Курсоры очевидны. Если Вы будете иметь миллион строк и пойдете строка строкой затем, то она возьмет навсегда. При выполнении некоторых тестов, если Вы соединяетесь с базой данных даже с "медленным" динамическим языком как Perl и выполняете некоторую строку операцией строки на наборе данных, скорость все еще будет намного больше, чем курсор в базе данных. Сделайте это с чем-то как Java/C/C ++ и различие в скорости еще больше. Если можно найти/устранить курсор в коде базы данных, он будет работать намного быстрее... Если необходимо использовать курсор, переписывание той части на любом языке программирования и вытаскивание его из базы данных, вероятно, приведут к огромным увеличениям производительности.

Еще одно примечание по курсорам, остерегайтесь кода как ВЫБОР @col1 = col1, @col2 = col2, @col3 = col3, где идентификатор = @currentid в цикле, который проходит идентификаторы и затем выполняет операторы на каждом столбце. В основном это - курсор также. Не только это, но и использование реальных курсоров часто быстрее, чем это, особенно статичны и forward_only. Если можно изменить операцию, которая будет установлена базирующиеся, это будет намного быстрее..... Однако курсоры имеют место для некоторых вещей...., но с точки зрения производительности существует штраф использованию их по основанным на наборе подходам.

Также остерегаются плана выполнения. Иногда это оценивает операции, которые занимают секунды, чтобы быть очень дорогими и операции, которые занимают минуты, чтобы быть очень дешевыми. Когда просмотр плана выполнения удостоверяется, что проверил все, возможно, вставляя некоторый ВЫБОР 'В этой области', GETDATE () в Ваш код.

1
ответ дан 30 November 2019 в 12:14
поделиться

Мой совет состоит в том, что "преждевременная оптимизация является корнем всего зла" в этом контексте, абсолютная ерунда.

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

, Если Вы не знаете то, что индексирует Вас потребность и как они должны быть настроены сразу, не делая профилирования Вас, уже перестали работать.

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

1
ответ дан 30 November 2019 в 12:14
поделиться

Кажется, что Вы говорите о MS SQL.

Запускают профилировщика и записывают tehe наиболее распространенные запросы, Вы работаете на базе данных. Затем выполните те запросы с включенным Планом выполнения, и Вы будете видеть то, что (если что-нибудь) замедлит Ваши запросы. Вы могли затем пойти и оптимизировать запросы или добавить больше индексов на своих полях.

Книги SQL дадут Вам хороший обзор и профилирования и запросят аналитическую функциональность.

0
ответ дан 30 November 2019 в 12:14
поделиться

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

0
ответ дан 30 November 2019 в 12:14
поделиться

Удостоверьтесь, что Вы представляете объемы производства использования - с точки зрения количества строк и загрузка. Запросы и их планы ведут себя по-другому согласно различным сценариям загрузки/объема

0
ответ дан 30 November 2019 в 12:14
поделиться

Обычно подсказки здесь:

http://www.sql-server-performance.com/

был высококачественным и полезным для меня в прошлом.

0
ответ дан 30 November 2019 в 12:14
поделиться

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

Оптимизация SQL является трудным, и нет никаких жестких правил. Существует очень немного универсальных инструкций, как которые можно следовать, такие:

  • 95% повышений производительности прибудут из приложения, не из конфигурации сервера или механизма базы данных.
  • Дизайн для правильности сначала, тонкая настройка для производительности позже
  • Уменьшает прохождения в базу данных
  • Попытка выразить вещи способом, который соответствует, Ваша модель данных
  • Игнорируют универсальный совет о производительности - да, в какой-то момент Вы найдете систему или SQL-оператор, где одно из тех правил не применяется.

, Но ключевой пункт то, что необходимо всегда применять правило 80-20. Что означает, что в любой системе необходимо настроить 20% (часто намного меньше) кода для самого большого увеличения производительности. Это - то, где поставщик обеспечивал инструменты обычно сбой , поскольку они не могут обычно предполагать контекст приложения/бизнеса выполнения.

-1
ответ дан 30 November 2019 в 12:14
поделиться
Другие вопросы по тегам:

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