Liên quan tới Database

SUBQUERY
Khi nào sử dụng subquery: Khi cần lấy dữ liệu từ bảng mà điều kiện phụ thuộc vào dữ liệu ở cùng bảng hoặc ở bảng khác.
Khi nào không cần sử dụng subquery: bất cứ khi nào hạn chế được thì hạn chế, sử dụng subquery là lựa chọn tồi tệ, nên sử dụng phương pháp khác để lấy dữ liệu thay thế cho subquery.
Oracle thì hộ trợ subQql tốt hơn bên MySQL.
Subquery luôn chạy đầu tiên, kết quả của truy vấn sẽ được sử dụng ở câu lệnh chính.
Ở trong 1 câu lệnh SQL Oracle cho phép tối đa ở mức 255 subquery.
INDEX
Ưu điểm: tăng tốc độ truy vấn của SQL, thay vì tìm kiếm ở toàn bộ quyển sách thì khi dùng index sẽ tạo ra mục lục như vậy khi cần tìm gì chỉ cần vào mục lục tìm sẽ nhanh chóng lấy ra dữ liệu.
Ngược điểm: tốn thời gian tạo, tốn tài nguyên.
Có 2 kiểu index: clustered index/unique index (khoá chính) và non-clustered index (khoá ngoại).
Nếu không tạo ra index thì SQL server sẽ tự động tạo ra index thuộc lại unique clustered index.
Chỉ nên tạo index chỉ khi thực sự cần thiết, bởi index sẽ tự động cập nhật bản thân khi bản ghi được cập nhật do đó sẽ ảnh hưởng đến hiệu suất trong quá trình xử lý dữ liệu. Do đó nên tạo index trên các bảng ít cập nhật.
Tính duy nhất ảnh hưởng đến hiệu suất của index.
Chú ý: không thực hiện câu lệnh select với điều kiện sử dụng tính toán vì thế index sẽ không được dùng với câu lệnh đó.
CÁC CHUẨN DATABASE
1NF: ở 1 bảng phải có tính duy nhất, không được tồn tại trùng lặp, không có giá trị mà có thể tính toán được từ các trường khác.
VD: thông tin dự án và thông tin nhân viên ở chung một bảng, thì một dự án bị lặp đi lặp lại các thông tin của nhân viên.
2NF:tiếp tục từ chuẩn 1NF, tách những thuộc tính riêng ra 1 bảng.
VD: từ 1NF ta tách 2 bảng NV và dự án. Những thuộc tính thuộc cả nhân viên và dự án tách ra thành 1 bảng nữa.(nhân viên, dự án, giờ làm-> thành 1 bảng mới)
3NF: tiếp tục từ chuẩn 2NF, loại bỏ các thuộc tính có thể bắc cầu.
VD: như mà nhân viên không được suy ra từ các thuộc tính khác trong bảng ( mã nhân viên A01021989, tên nhân viên A, ngày sinh 01021989).
TRANSACTION
Tại sao sử dụng: đảm bảo tính nhất quán của dữ liệu.
Không sử dụng: có rất ít lý do mà để không sử dụng transaction, có thể chạy lâu.

NGUYÊN NHÂN TRUY VẤN SQL CHẬM

  • Tránh sử dụng SQL Server Cursors
  • Cân nhắc có cần mệnh đề DISTINCT trong câu truy vấn hay không (Bởi vì nó sẽ phải thực hiện thêm việc sort data)
  • Sư dụng UNION tương đuong với SELECT DISTINCT nên sử dụng câu lệnh UNION ALL thay thế
  • Không nên trả về các cột không cần thiết, như câu SELECT *
  • Tránh sử dụng các toán tử sau trong mệnh đề WHERE: “IS NULL”, “<>”, “!=”, “!>”, “!<“, “NOT”, “NOT EXISTS”, “NOT IN”, “NOT LIKE”, and “LIKE ‘%abc'” vì chúng không sử dụng đặc tính của index mà thay vào đó sẽ tìm toàn bảng.
  • Nếu bạn có sự chọn lựa giữa IN và EXISTS trong câu truy vấn, bạn hãy chọn EXISTS là tốt nhất. Tương tự như IN và BETWEEN, hãy chọn BETWEEN
  • Tránh sử dụng Functions hoạt động trực tiếp vào cột vì index sẽ không được sử dụng (DATEDIFF(yy,datofbirth,GETDATE()) > 21 thay bằng dateofbirth < DATEADD(yy,-21,GETDATE()) )
  • Nên tránh sử dụng các hàm chuyển đổi kiểu dữ liệu trong mệnh đề WHERE
  • Trong các câu truy vấn có 1/nhiều OR bạn có thể viết lại bằng cách kết hợp UNION ALL để tăng tốc độ truy vấn
  • Nên tránh sử dụng DISTINCT và ORDER BY trong câu lệnh SELECT
  • Nên tránhsử dụng SELECT COUNT(*) vì nó không hiệu quả và lãng phí tài nguyên thay vì thế bạn nên sử dụng IF EXISTS thì hiệu quả hơn

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s