Увеличете производителността на SQL заявките с MSSQL. Научете как да оптимизирате вашите заявки за ефективност и бързина в това информативно ръководство.

Неоптимизираните SQL заявки на Microsoft SQL Server (MSSQL) могат да доведат до ниска производителност, прекомерно използване на ресурси, непоследователни данни, пропуски в сигурността и затруднения при поддръжката. Тези проблеми могат да засегнат функционалността, надеждността и сигурността на вашата програма, което може да разочарова потребителите и да ви струва повече пари.

Оптимизирането на SQL заявки в MSSQL е от решаващо значение за постигане на ефективна и бърза производителност. Чрез прилагане на техники като индексиране, опростяване на заявки и процедури за съхранение, потребителите могат балансирайте производителността на заявките и производителността на модифицирането на данни, като в крайна сметка подобрявате цялостната база данни производителност.

Оптимизиране на заявки чрез индексиране

Индексиране на бази данни организира и сортира данни в таблици на база данни, за да направи търсенето по-бързо и по-ефективно. Индексирането създава копия на данни в таблици и ги сортира така

instagram viewer
двигател на база данни може лесно да ги навигира.

При изпълнение на заявка машината на базата данни използва индекса, за да намери необходимите данни и бързо връща резултати, като по този начин ускорява времето за изпълнение на заявката. Без индексиране машината на базата данни трябва да сканира всички редове в таблицата, за да намери необходимите данни, а това може да отнеме много време и ресурси, особено за големи таблици.

Създаване на индекс в MSSQL

Създаването на индекс в релационни бази данни е лесно и MSSQL не се пренебрегва. Можете да използвате СЪЗДАВАНЕ НА ИНДЕКС израз за създаване на индекс в MSSQL.

СЪЗДАВАЙТЕИНДЕКС име_на_индекс
ON table_name (колона1, колона2, ...);

В горния SQL код, име_на_индекс е името на индекса, име_на_таблица е името на таблицата и колона1, колона2, и така нататък са имената на колоните, които ще бъдат индексирани.

Ето как да създадете неклъстъриран индекс на a Клиенти маса Фамилия колона с SQL оператор.

СЪЗДАВАЙТЕ НЕКЛУСТЕРЕН ИНДЕКС IX_Фамилия_Клиенти
ON клиенти (фамилия);

Изявлението създава неклъстъриран индекс, наречен IX_Фамилия_Клиенти на Фамилия колона на Клиенти маса.

Цената на индексирането

Докато индексирането може значително да подобри производителността на заявките, то си има цена. Индексирането изисква допълнително дисково пространство за съхраняване на индекса, а операциите по индексиране могат да забавят операциите за модифициране на данни като вмъквания, актуализации и изтривания. Трябва да актуализирате индекса при модифициране на данни и операцията по актуализиране може да отнеме много време за големи таблици.

Следователно е от съществено значение да се балансира производителността на заявките и производителността на модифициране на данни. Трябва да създавате индекси само за колони, които ще търсите често. Също така е важно редовно да наблюдавате използването на ресурсите на индекса и да премахвате ненужните индекси.

Оптимизиране на заявки чрез опростяване на заявки

За анализ на данни сложните заявки са полезни за извличане на данни. Сложните заявки обаче оказват влияние върху производителността и могат да доведат до неефективно извличане на данни.

Опростяването на заявките включва разбиване на сложни заявки на по-малки, по-прости за по-бърза, по-малко ресурсоемка обработка.

Опростяването на заявките подобрява производителността и улеснява извличането на данни, като разделя сложните заявки на по-прости заявки, тъй като сложните заявки могат да причинят затруднения в системата. Те са трудни за разбиране, което затруднява разработчиците и анализаторите да отстраняват проблеми или да идентифицират области на оптимизация.

Ето примерна сложна заявка, която се изпълнява на MSSQL за таблица с клиентски поръчки, където целта е да се идентифицират тенденции и модели в данните:

ИЗБЕРЕТЕ
Потребителско име,
COUNT(order_id) КАТО total_orders,
AVG(сума_на_поръчка) КАТО средна_сума_на_поръчка,
SUM(сума_на_поръчка) КАТО общи_продажби
ОТ
поръчки
КЪДЕТО
order_date МЕЖДУ „2022-01-01“ И „2022-12-31“
И order_status = 'завършена'
ГРУПИРАЙ ПО
Потребителско име
ИМАЩ
COUNT(order_id) > 5
ПОДРЕДЕНИ ПО
общи_продажби DESC;

Заявката търси имена на клиенти и информация за продажби от завършени поръчки през 2022 г., докато филтрира клиенти с по-малко от пет поръчки по общи продажби в низходящ ред.

Заявката може да предостави ценна информация, но е сложна и в крайна сметка ще отнеме повече време за обработка, особено ако поръчки таблицата има много записи.

Можете да опростите заявката, като я разделите на по-малки заявки, които се изпълняват една по една.

-- Вземете списък с имена на клиенти и общия брой поръчки, които са направили
ИЗБЕРЕТЕ
Потребителско име,
COUNT(order_id) КАТО total_orders
ОТ
поръчки
КЪДЕТО
order_date МЕЖДУ „2022-01-01“ И „2022-12-31“
И order_status = 'завършена'
ГРУПИРАЙ ПО
Потребителско име
ИМАЩ
COUNT(order_id) > 5;

-- Вземете средната сума на поръчката за всеки клиент
ИЗБЕРЕТЕ
Потребителско име,
AVG(сума_на_поръчка) КАТО средна_сума_на_поръчка
ОТ
поръчки
КЪДЕТО
order_date МЕЖДУ „2022-01-01“ И „2022-12-31“
И order_status = 'завършена'
ГРУПИРАЙ ПО
Потребителско име
ИМАЩ
COUNT(order_id) > 5;

-- Вземете общите продажби за всеки клиент
ИЗБЕРЕТЕ
Потребителско име,
SUM(сума_на_поръчка) КАТО общи_продажби
ОТ
поръчки
КЪДЕТО
order_date МЕЖДУ „2022-01-01“ И „2022-12-31“
И order_status = 'завършена'
ГРУПИРАЙ ПО
Потребителско име
ИМАЩ
COUNT(order_id) > 5
ПОДРЕДЕНИ ПО
общи_продажби DESC;

Този опростен подход разделя задачите за получаване на имената на клиентите и общите поръчки, средните суми на поръчките и общите продажби за всеки клиент в отделни заявки. Всяка заявка има определени цели и е оптимизирана за конкретни задачи, което улеснява обработката на базата данни при поискване.

Съвети за опростяване на заявките

Когато опростявате заявки, важно е да се съсредоточите върху една задача на път, за да създадете заявки, които са оптимизирани за конкретната задача. Фокусирането върху една задача може значително да подобри производителността.

Освен това е важно да използвате добри конвенции за именуване, за да направите кода по-лесен за разбиране и поддръжка. Можете лесно да идентифицирате потенциални проблеми и области за подобрение в системата.

Оптимизиране на заявки чрез съхранени процедури

Съхранени процедури са набори от предварително написани SQL изрази, съхранявани в база данни. Можете да използвате съхранени процедури за извършване на различни операции, от актуализиране до вмъкване или извличане на данни от база данни. Съхранените процедури могат да приемат параметри. Можете да ги извиквате от различни езици за програмиране, което ги прави мощен инструмент за разработка на приложения.

Ето пример за създаване на съхранена процедура за MSSQL, която връща средната заплата на служителите в отдел:

СЪЗДАВАЙТЕПРОЦЕДУРА [dbo].[Получаване на средна заплата]
@DepartmentName VARCHAR(50)
КАТО
НАЧАЛО
ИЗБЕРЕТЕСР(Заплата) като Средна работна заплата
ОТ служители
WHERE отдел = @DepartmentName
КРАЙ

В съхранената процедура сте дефинирали параметър, наречен @Име на отдел и използваха КЪДЕТО клауза за филтриране на резултатите по отдел. Вие също сте използвали СР функция за изчисляване на средната заплата на служителите в отдела.

Можете да изпълнявате съхранени процедури в MSSQL с ИЗПЪЛН изявление.

Ето как можете да изпълните съхранената процедура по-горе:

EXEC [dbo].[GetAverageSalary] @DepartmentName = 'Продажби'

В оператора за изпълнение на съхранена процедура вие предавате Продажби стойност като име на отдел. Декларацията ще върне средната заплата на служителите в отдела за продажби.

Как съхранените процедури подобряват производителността на заявките?

Съхранените процедури могат значително да подобрят производителността на заявките. Първо, съхранените процедури намаляват мрежовия трафик, като изпълняват SQL изразите от страна на сървъра, вместо да прехвърлят данни напред и назад между клиента и сървъра, като по този начин намалява количеството данни, изпратени по мрежата, и намалява отговора на заявката време.

Второ, можете да компилирате съхранени процедури за кеширане, което означава съхраняване на плана за изпълнение в паметта. Когато извикате съхранената процедура, сървърът извлича плана за изпълнение от паметта, вместо да компилира повторно SQL изразите, като по този начин се намалява времето за изпълнение на съхранената процедура и се подобрява заявката производителност.

Можете да настроите MSSQL на Ubuntu

MSSQL направи значителни крачки в поддръжката на Ubuntu и други Linux дистрибуции. Microsoft призна нарастващата популярност на Linux в предприятието и реши да разшири наличността на техния водещ сървър на база данни до Linux платформи.