Là một xây dựng viên, chắc chắn các bạn sẽ phải thao tác với Database. Mặc dùng các framework ORM (Object Relation Mapping) hiện giờ cũng cấp không hề ít hàm triển khai việc thao tác với DB. Tuy nhiên không buộc phải lúc như thế nào nó cũng khá được tối ưu. Và điều ấy vẫn phụ thuộc vào vào chủ yếu cách sử dụng của khách hàng nữa.
Bạn đang xem: Cách tối ưu hóa câu truy vấn
Bài bây giờ của bản thân sẽ cho chính mình 5 mẹo để tối ưu câu truy hỏi vấn, giúp nâng cao performace, nâng cao hiệu trái của ứng dụng
1. Học bí quyết đánh Index vừa lòng lýHọc cách làm thế nào để tiến công index cho phù hợp là các cực tốt là nhằm tăng perfomance của câu tróc nã vấn. Index chất nhận được truy cập một giải pháp nhanh rộng tới db trong số những trường hợp điển hình. Những người dân mới làm việc với db thường xuyên cảm thấy câu hỏi đánh index này cao tay hoặc rất khó. Họ hay là chẳng tấn công index cho bất cứ cái gì, hoặc là nỗ lực để tấn công index cho phần lớn thứ. Dĩ nhiên, không có phuơng án nào trong số ấy là đúng cả. Với câu hỏi không đánh index cho bất kể thứ gì, câu truy nã vấn của bạn sẽ có năng lực bị chậm. Còn nếu đánh index cho tất cả mọi thứ, việc update hay insert sẽ bị chậm lại.
Nếu bạn không chắc chắn rằng rằng mình đủ gọi về index, hãy mày mò nhiều hơn về nó. Chú ý vào việc để ý đến xem trường nào yêu cầu đánh index, trường làm sao không, và đánh index theo kiểu nào, B-tree hay Bit
Map .v.v.v
Một giữa những sai lầm nhưng mà mình thấy đa số chúng ta mới hay chạm chán phaỉ, sẽ là lúc nào thì cũng sử dụng SELECT * mặc dù các tương đối nhiều trường (cột) các bạn không cần thông tin của chúng.
Nếu bảng nhỏ, bài toán lấy thêm những trường này không gây ra không ít khác biệt. Tuy vậy với tập tài liệu lớn hơn, việc chỉ định số đông cột mà bạn muốn lấy đang giảm không hề ít thời gian truy nã vấn.
Vì thế, ví dụ giả dụ bạn chỉ việc lấy các thông tin: tên, ngày sinh, giới tính của những USER, thay vị sử dụng
SELECT * FROM USER ...thì hãy sử dụng
SELECT NAME, DATE_OF_BIRTH, GENDER FROM USER ...để câu truy vấn của bản thân có xuất sắc độ hài lòng hơn nhé
Cũng tựa như như thế, nếu như bạn chỉ cần một số lượng gới hạn các record trả về, thì nên sử dụng LIMIT (hay tuơng tự nuốm ở những DB khác).
SELECT * FROM USER;Vis dụ, ví như bạn chỉ cần hiển thị 10 record đầu tiên trong 50.000 record của bảng USER, thì câu truy tìm vấn này vẫn báo với DB của khách hàng để giảm bớt lượng dữ liệu cần tìm hiếu. Bằng cách này, DB sẽ tạm dừng việc tra cứu kiếm sau khoản thời gian đã tìm kiếm được 10 record thay vì chưng sẽ yêu cầu scan toàn cục bảng USER
SELECT * FROM USER LIMIT 10;3. Tránh sử dụng function bên tay toán tử so sánh (hay đúng hơn là tránh sử dụng hàm so với cột của bảng)Function là một trong cách tiện lợi để xử lý những task phúc tạp mà chúng ta cũng có thể sử dụng nó cả nghỉ ngơi mệnh đề SELECT tốt WHERE. Tuy nhiên,ứng dụng chúng trong mệnh đề WHERE có thể gây ra những sự việc ko giỏi về performance. Hãy ngó qua ví dụ bên dưới đây
4. Suy nghĩ việc loại bỏ các câu truy nã vấn nhỏ tuơng quanCâu truy vấn con tuơng quan là hầu hết câu tróc nã vấn bé phục trực thuộc vào câu truy nã vấn ngoài. Nó sử dụng dữ liệu lấy được tự câu truy nã vấn ngoại trừ trong mệnh đề WHERE. Ví dụ bạn có nhu cầu lấy danh sách tất cả những us nhưng mà đã ủng hộ. Chúng ta có thể sử dụng câu tầm nã vấn
SELECT user_id, last_name FROM users WHERE EXISTS (SELECT * FROM donationuser WHERE donationuser.user_id = users.user_id);Trong trường vừa lòng này, câu tróc nã vấn bé sẽ chạy 1 lần với từng record của câu tầm nã vấn chính. Cụ thể là các lần xét tới 1 record của câu truy tìm vấn chính, câu tróc nã vấn bé lại được chạy với điều kiện WHERE trong những số đó là quý giá user_id của record đang đc xét của câu truy tìm vấn chính. Do đó nó câu truy vấn chưa hiệu quả
Thay vào đó, ta rất có thể sử dụng
SELECT DISTINCT users.user_id FROM users INNER JOIN donationuser ON users.user_id = donationuser.user_id;Nếu gồm hàng triệu user trong DB, câu lệnh với câu tầm nã vấn nhỏ tuơng quan vẫn hầu như hoàn toàn có thể gây kém hiệu quả hơn áp dụng INNER JOIN chính vì ta cần chạy câu tầm nã vấn bé hàng triệu lần. Nhưng nếu khách hàng đang tìm kiếm những người donations được tạo bởi vì 1 user chỉ định, thì sử dụng nó lại là 1 trong ý tưởng k tồi. Theo quy tắc chung, nếu khách hàng tìm kiếm nhiều hoặc phần nhiều các hàng, hãy cố gắng tránh sử dụng các truy vấn nhỏ tương quan. Tuy nhiên, hãy nhớ rằng việc sử dụng những truy vấn bé tương quan hoàn toàn có thể là bắt buộc tránh ngoài trong một vài trường hợp.
5. Tránh thực hiện ký tự %, _ nghỉ ngơi đầu giá trị tìm tìm LIKEBất cứ lúc nào có thể, kị sử dụng like theo phương pháp này
SELECT * FROM users WHERE name lượt thích "%bar%";Sử dụng % làm việc đầu đang ngăn vấn đề db sử dụng index (nếu có) của cột name. Vì vậy sẽ có tác dụng giảm vận tốc truuy vấn. Vì chưng thế, nếu có thể (spec mang lại phép), hãy tránh
SELECT * FROM users WHERE name lượt thích "bar%";Bài viết của chính bản thân mình được dịch từ bỏ nguồnhttp://www.vertabelo.com/blog/technical-articles/5-tips-to-optimize-your-sql-queries
Mục lục nội dung
What is an index ?Index data structure
Create Index for optimising query
Where Clause
Slow index
Join
Bulk insert/update
Query – Strategery
Tác giả: trần Văn Dem
SQL là 1 trong những ngôn ngữ không còn xa lạ với mọi lập trình viên và so với với lập trình sẵn viên backend việc quản lý được SQL là 1 trong điều hết sức quan trọng. Trong quá trình làm việc của mình với SQL mình đã tham khảo rất nhiều nguồn để về tối ưu câu truy nã vấn hiểu được buổi giao lưu của SQL. Những bài nói về tối ưu cùng với SQL trên mạng là không ít nhưng mình không tìm thấy bao gồm một bài bác nào tổng hợp các kỹ thuật nên dùng làm tối ưu với SQL. Bài viết này bản thân sẽ share những nghệ thuật mình đang thực hiện để tối ưu hệ thống của chính mình với SQL cụ thể hơn là Mysql vì nhiều kỹ năng và kiến thức mình không thử ở những loại SQL khác.
Bài này sẽ dựa trên kinh nghiệm cá nhân nên hy vọng được sự đóng góp của đa số người. Mình cập nhật nội dung bài viết này liên tục để update hầu như kỹ thuật tiên tiến nhất mình sử dụng.
Create Index for optimising query
Chúng ta đang hiểu index là gì và tại sao khi sử dụng index lại cho họ kết quả tốt hơn. Việc tiếp theo là vận dụng vào các trường đúng theo thực tế.
Có một chú ý là trường bạn dùng làm đánh index thì cần ít giá bán trị Null vì quý hiếm này gây nặng nề cho database trong quá trình tạo cây index