🥬
FreshForFresh
  • ✌️Xin chào!
  • Overview
    • 💡Data structures and Algorithms
    • 👀Programming
    • 🧠Database
    • 🦴Back-End
    • ✨Front-End
    • 💐Spring Framework
    • 🛠️Tool
  • Data structures and Algorithms
    • 🎰Data Type
    • 🗑️Garbage collection
    • 🧩Data structures
    • 🎲Algorithms
  • Programming
    • 🧮Compiler
      • 🤖Tại sao phải cần compiler?
      • 📠Java Virtual Machine
  • 📈Thread
  • 🔐Lock & Deadlock
  • 🏇Race condition & Data Race
  • 🧯Synchronized
  • 🗜️Blocking IO và Non Blocking IO Client Server Socket
  • 🌐Languages
    • 🎛️Programming Language
    • 📑Client-Side & Server-Side
    • ⁉️Why java? Why javascript?
  • 🗼Design pattern
    • 🎨Front-End Design Pattern
    • 🏗️Back End Design Pattern
      • 🐴with Java
      • 🦄with Spring Boot
      • 🐖with Modern Backend Development
      • 🐁with Microservice
  • 🍀Clean Code
    • 🌊Chương 1: Code sạch
    • 📐Chương 2: Quy tắc đặt tên rõ nghĩa
    • 🚧Chương 3: Cách viết hàm
    • 👻Chương 4: Comments thế nào cho chuẩn?
    • 🥳Chương 5: Định dạng code.
    • 😈Chương 6: Đối tượng và cấu trúc dữ liệu
    • 🐛Chương 7: Xử lí lỗi
    • ☦️Chương 8: Ranh giới code
    • 🧪Chương 9: Unit test
    • 🥂Chương 10: Lớp đối tượng
    • 🥡Chương 11: Code sạch cấp hệ thống
  • Database
    • 🐔Giới thiệu
    • 📰Các loại cơ sở dữ liệu
    • 🐘Các loại DBMS phổ biến
    • 🕵️‍♀️SQL và cách sử dụng với relational database
      • 👺Lệnh SQL
      • 🛢️JOIN trong SQL
      • 🛕GROUP BY trong SQL
      • 🐼ORDER BY trong SQL
      • 🐣Truy vấn con SUBQUERY trong SQL Server
      • 🏦Transaction Trong SQL
      • 🇲🇰ACID
    • ☢️Thiết kế cơ sở dữ liệu
    • 🕍Consistency and concurrency handling
      • 🔒Database locking
      • 🎮Concurrency Control
      • 🙀Isolation Level
    • 🎨Performance & Scability
      • ☝️Indexing
      • 👯‍♂️Partitioning
      • 💅Các tips tăng hiệu suất SQL
      • 🇲🇬Kiểm tra và Xác thực việc Sao lưu và Phục hồi CSDL
      • 🌠Database sharding
      • 🧘‍♂️REPLICATION
      • 😁Các vấn đề ảnh hưởng đến performance.
  • Back-End
    • 🔫API?
    • 🐕‍🦺Web Services
    • 💾Phân biệt API và web service
    • 🙆‍♂️Tìm hiểu về RestAPI
    • 🧦SOAP
    • ✈️GraphQL API
    • 📊Compared GraphQL & REST
    • 📄Phân biệt HTTP & HTTPS
    • 🚵Client & Server
    • 🇩🇲DOM
  • Front-End
    • 🦑User Interface (UI)
    • 🛰️State Management
  • Spring Framework
    • 🔐Spring Security
      • 🌅Đơn giản hoá Spring Security
      • 🌸Spring Security: Authentication and Authorization In-Depth
      • 🚻OAuth2 Basic
      • 🀄JWT + Spring Security Oauth
      • 📤Logout trong ứng dụng sử dụng bảo mật Oauth
      • 🔂Reset Password
      • 🎗️OAuth2 Remember Me với Refresh Token
      • ⛓️OAuth2 cho một Spring REST API
  • Network
    • 💸Mạng máy tính căn bản
  • Tool
    • 🦏Các câu lệnh Docker cơ bản
    • 🦧Github
      • 🐰Các lệnh Git cơ bản
      • 🐇Một số trường hợp khi sử dụng Git
    • 🏚️WebServer
      • 🪂Tổng quan về kiến trúc hệ thống
      • 🔃Cơ bản về WebServer Nginx
  • Tài nguyên
    • 👨‍🏫Course
    • 📖Docs
Powered by GitBook
On this page
  1. Database
  2. Performance & Scability

Các tips tăng hiệu suất SQL

Mỗi khách hàng hay người dùng đều muốn được trả về dữ liệu nhanh nhất do đó chúng ta cần thiết kế một cơ sở dữ liệu có hiệu suất cao cho mỗi lẫn thao tác với dữ liệu. Không có bất kì cách nào trực tiếp đem lại hiệu suất tốt nhất nhưng chúng ta có thể cải thiện hiệu suất câu lệnh SQL ví dụ như tạo Index , sử dụng join , viết lại subquery để chỉ dùng join v.v...

Là một Lập trình viên chúng ta biết câu lệnh SQL có thể viết trong rất nhiều cách nhưng chúng ta nên follow theo cách tốt nhất để đạt được hiệu suất tốt hơn. Dưới đây là các tips cho chúng ta:

1. Hãy dùng EXISTS thay vì IN để kiểm tra sự tồn tại của dữ liệu.

2. Tránh * trong câu lệnh SELECT. Hãy dùng tên cột thích hợp.

3. Chọn loại dữ liệu thích hợp . Ví dụ lưu chuỗi sử dụng loại varchar thay vì sử dụng loại Text. Khi muốn sử dụng loại Text, là khi bạn cần lưu dữ liệu lơn (nhiều hơn 8000 ký tự).

4. Tránh dùng nchar và nvarchar vì cả hai đều tăng bộ nhớ lên gấp đôi so với char và varchar.

5. Tránh NULL đối với những trường mà đã cố định độ dài. Trong trường hợp yêu cầu là NULL hãy sử dụng một trường loại varchar với độ dài tùy biến thì vẫn lấy space ít hơn là NULL.

6. Tránh dùng mệnh đề Having. Chỉ dùng khi muốn lọc kết quả trả về.

7. Hãy tạo ra indexs là cách tốt nhất tăng tốc . Indexs bao gồm Clustered và Non-Clustered.

8. Hãy giữ index của clustered nhỏ thôi vì trường mà dùng trong cluster index đó thì cũng được dùng trong non-clustered index.

9. Đa số cột được chọn nên đặt trong non-clustered index.

10. Những index nào không được dùng thì nên xóa đi.

11. Tốt hơn là tạo ra index trên những cột có giả trị là số thay vì là ký tự. Giá trị số sử dụng ít bộ nhớ hơn ký tự.

12. Dùng câu lệnh join thay vì dùng select trong select

13. Hãy sử dụng mệnh đề WHERE để giới hạn cỡ của bảng kết quả trả về mà được tạo ra với câu lệnh join.

14. Hãy dùng TABLOCKX trong khi chèn dữ liệu vào bảng và TABLOCK trong khi merging dữ liệu

15. Sử dụng WITH (NOLOCK) trong khi truy xuất dữ liệu từ bất kỳ một bảng nào.

16. Dùng SET NOCOUNT ON và sử dụng TRY - CATCH để tránh điều kiện deadlock.

17. Tránh dùng cursor vì nó ảnh hưởng đến hiệu suất của chương trình rất chậm.

18. Sử dụng biến TABLE thay vì dùng bảng TEMP. Dùng bảng TEMP đòi hỏi tương tác với cơ sở dữ liệu TEMPDB mà mất thời gian để thực hiện một tác vụ.

19. Sử dụng UNION ALL thay vì UNION nếu có thể.

20. Sử dụng tên Schema trước tên đối tượng SQL.

22. Sử dụng Stored Procedure cho những dữ liệu thường xuyên được sử dụng và những query hỗn hợp , hoặc những câu lệnh chứa nhiều logic phức tạp.

22. Giữ transaction nhỏ nhất có thể vì transaction khóa việc xử lý dữ liệu bảng và có thể dẫn đến kết quả bị deadlocks.

23. Tránh tiền tố “sp_” với tên store procedure người dùng tự định nghĩa bởi vì SQL server đầu tiên tìm kiếm những thủ tục người dùng định nghĩa trong cơ sở dử liệu master và sau đó mới sử dụng phiên làm việc của cơ sở dữ liệu hiện hành.

24. Tránh dùng câu query Non-correlated . Sử dụng câu query này như một câu query riêng instead thay vì là query chính và lưu output trong một biến, mà có thể tham chiếu đến câu query chính hoặc là một phần sau của batch.

25. Tránh Table Valued Functions (TVFs) với nhiều câu lệnh. Vì nó giảm hiệu suất

PreviousPartitioningNextKiểm tra và Xác thực việc Sao lưu và Phục hồi CSDL

Via

🎨
💅
Viblo