Ако четете тази статия, най-вероятно вече сте запознати със SQL. Знаете как да пишете основни SQL заявки. Има много начини да изпълните SQL заявка, за да получите желаните резултати във вашата база данни.
Въпреки това, не всички SQL заявки са създадени еднакви. Повечето могат да бъдат оптимизирани, за да следват най-добрите практики за SQL заявки. Тази статия се фокусира върху 9 съвета за оптимизиране на SQL заявки. След като прочетете, ще знаете всички допустими и забрани от писането на SQL заявки.
1. Избягвайте използването на SELECT Asterisk (SELECT *)
Това е една от най-важните най-добри практики за SQL. Заявката SELECT * връща записи от всички колони на таблицата. Макар и полезна в някои случаи, тази често заявка води до множество усложнения:
- Може да не се наложи да извличате всички колони. Въпреки това, SELECT * ги връща всички, консумирайки прекомерна честотна лента за изпълнение на заявка през мрежата.
- Имената на колони в таблицата могат да се променят или премахват, както и да се добавят нови колони. По този начин може да получите неочаквани резултати за заявката SELECT *. По-добра идея е да посочите имена на колони.
- SELECT * е по-бавен от SELECT имена на колони, тъй като последният може да използва индекси на колони за връщане на данни.
- Редът на колоните, върнати от SELECT *, не е във вашия контрол. Въпреки това, вие дефинирате желания ред, когато посочите имената на колоните.
2. Използвайте клаузата WHERE и HAVING точно
Клаузите WHERE и HAVING в SQL имат различни функционалности. Следователно трябва да ги използваме по различен начин. Трите основни случая на използване на WHERE и HAVING са по-долу:
- WHERE може да се използва с CRUD заявки, т.е. SELECT, INSERT, UPDATE, DELETE. От друга страна, можете да използвате HAVING само с израза SELECT.
- WHERE филтрира данни преди каквато и да е операция на агрегиране, като например GROUP BY. След това може да се използва без функция за агрегиране. HAVING трябва да се използва след обединяване.
- Можем да използваме функциите за агрегиране, като SUM, MIN, MAX COUNT с клаузата HAVING. С клаузата WHERE не можем да използваме функции за агрегиране, освен ако тази клауза не е част от подзаявка, съдържаща се от клаузата HAVING.
3. Използвайте заявка INNER JOIN вместо клаузата WHERE за обединяване на таблици
Заявката JOIN е може би една от най-полезните SQL заявки. Позволява ви да ИЗБЕРЕТЕ данни от множество таблици. Въпреки че можете да използвате клаузата WHERE, за да получите обобщени данни от две таблици, клаузата WHERE е силно неефективна.
Клаузата WHERE връща CROSS JOIN, което е декартово произведение от записи в двете колони. Например, ако имате 1000 записа в таблица A и същия брой записи в таблица B, клаузата WHERE ще създаде CROSS JOIN с 1 000 x 1 000 =1 000 000 записа.
Ако колоните на таблици A и B, включени в клаузата WHERE, имат само 1 000 общи стойности, клаузата WHERE ще върне 1 000 записа от първоначалните 1 000 000 записа, създадени от декартовия продукт.
Клаузата INNER JOIN връща само 1000 записа, където и двете таблици A и B имат общи стойности в колоните. В този случай INNER JOIN има 1000 пъти по-малко работа от клаузата WHERE.
Някои бази данни преобразуват клаузата WHERE в заявката JOIN в клаузата INNER JOIN зад сцената. Въпреки това, винаги се препоръчва да използвате изрично INNER JOIN вместо клаузата WHERE, за да следвате най-добрите практики за SQL кодиране.
4. Използвайте EXISTS, NOT EXISTS вместо IN и NOT IN в SQL
Винаги използвайте EXIST над клаузата IN, ако искате да потвърдите съществуването на стойност в определена таблица.
Процесът, който изпълнява клаузата EXISTS, спира веднага щом намери необходимата стойност в таблицата. От друга страна, IN заявката сканира всички дори след намиране на необходимата стойност.
По същия начин винаги трябва да използвате NOT EXISTS вместо NOT IN, когато търсите стойността, която не съществува в таблица.
5. Използвайте оператор Equals (=) вместо LIKE Оператор в SQL
Можете да използвате както операторите =, така и LIKE, за да съпоставите низове. Основната разлика между двете е, че операторът LIKE се използва за съвпадение на заместващи знаци като % за търсене на частични низове, докато операторът за равенство „=“ търси точни съвпадения.
Ако трябва да избирате между двете, винаги предпочитайте оператора за равенство (“=”), тъй като той използва индексирани колони. Следователно е по-бързо от клаузата LIKE.
6. Използвайте клаузата LIMIT, за да намалите резултатите от търсенето
Ако трябва да върнете данни от множество таблици или колони, използвайте клаузата LIMIT (известна още като клауза TOP), за да намалите резултатите от заявката. Ако има хиляди колони или искате да видите как изглеждат данните само във вашите таблици, не е необходимо да връщате всички редове. Вместо това ограничете броя на редовете, върнати от заявката SELECT с помощта на клаузата LIMIT във връзка с нея.
7. Използвайте псевдоними на таблици при заявка за множество таблици
За да избегнете объркване и да предотвратите синтактичния анализ на имената на колони от бази данни при търсене на таблицата, към която принадлежат, винаги използвайте псевдоними на таблици.
Вече трябва да използвате имена на таблици/псевдоними, ако имате едни и същи имена на колони в няколко таблици, така че това няма да увеличи работното ви натоварване.
8. Избягвайте да поставяте префикс на съхранените процедури със „sp_“
Ако сте работили със съхранени процедури, тогава най-вероятно сте поставили префикс към името на съхранената процедура с „sp_“. Това не е най-доброто.
SQL Server започва с търсене на съхранени процедури със „sp_“ в началото на имената им в основната база данни, преди да продължи да търси другаде.
Следователно можете да спестите много време, като не поставяте префикс към съхранените процедури със „sp_“. След това, вместо да се опитва да намери съхранената процедура в главната база данни, SQL сървърът директно ще провери dbo като собственик на съхранената процедура.
9. Приемете добър стил за писане на заявки
От съществено значение е да следвате най-добрите практики за SQL заявки, като добри практики за стил, когато пишете SQL заявки. Обърнете внимание на препоръките по-долу за подобряване на стила на писане на заявката:
- Винаги добавяйте коментари към SQL заявки. Коментарите не само ще помогнат на другите членове на екипа да разберат по-добре вашите запитвания, но и ще ви напомнят какво сте правили сами в миналото.
- Използвайте очевидни конвенции за именуване. Базата данни, таблиците, имената на колони, временните таблици и други имена на променливи трябва да бъдат 100% четими и ясни.
- Отстъп на вашите заявки, когато е възможно. Вътрешните заявки трябва да са с отстъп с един раздел отляво. Имената и типовете на колоните в таблицата също трябва да бъдат с отстъп. Отстъпът осигурява по-изчистен вид и подобрява четимостта на заявките, което е отразено в най-добрите практики на SQL Server за заявки.
Заключение
SQL е много гъвкав език, предоставящ множество начини за изпълнение на желаните задачи в база данни. За да направите приложенията си по-ефективни и продуктивни и да избегнете дългосрочни проблеми с базата данни, прилагайте най-добрите практики за оптимизиране на съвременните SQL заявки, за да пишете заявките си. Тези методи ви помагат да ускорите настройката на производителността в SQL, да премахнете ненужните рутинни действия и да направите цялата си работа по-сбита и прозрачна.
Прочетете също
22 изящни примера за SQL индекс за ускоряване на вашите заявки