1. Các nguyên nhân làm chậm truy vấnNgoài nguyên nhân khiến cho việc truy vấn dữ liệu ứng dụng của bạn bị chậm. Loại bỏ các nguyên nhân vật lý như thiếu bộ nhớ, kết nối mạng chậm, dưới đây là một số nguyên nhân khách quan và cách khắc phục.
2. Cách khắc phục1.Giảm thiểu sự kết nối tới hệ quản trị cơ sở dữ liệu Mỗi lần lấy dữ liệu, hệ thống sẽ phải kết nối tới CSDL, điều này làm tăng thời gian của truy vấn. Nếu có rất nhiều truy vấn mà mỗi truy vấn chỉ xử lý trong thời gian ngắn, sẽ tiêu tốn rất nhiều thời gian. Thay vào đó, hãy chỉ sử dụng một số ít kết nối tới CSDL, mỗi kết nối sẽ xử lý nhiều nghiệp vụ hơn. 2.Chỉ SELECT những trường mà bạn cần Đa số các nhà phát triển website thường sẽ SELECT * chọn tất cả các trường(fields) trong dòng dữ liệu. Tuy nhiên, bạn sẽ ngạc nhiên là một dòng SELECT * có thể gây chậm khi chạy truy vấn, đặc biệt là trên các bảng dữ liệu lớn. Giả sử, bạn chỉ sử dụng mội trường name trong bảng Users thì thay vì chọn tất cả 20 trường của tất cả bản ghi, bạn chỉ nên SELECT đúng trường name mà bạn cần thôi. Nó sẽ chiếm ít bộ nhớ trên máy chủ của bạn và do đó cho phép máy chủ cơ sở dữ liệu của bạn sử dụng bộ nhớ trống để xử lý các truy vấn và các tiến trình khác.
Thay vì
3.Sử dụng Indexs và cố gắng truy vấn dữ liệu thông qua các điều kiện xác lập trên chỉ số. Việc đánh chỉ mục cho 1 số thuộc tính trong bảng giúp cho việc tìm kiếm bản ghi nhanh hơn. Lợi ích của Indexs trong Mysql bạn có thể tham khảo trong bài: Sử dụng indexs trong mysql 4.Sử dụng EXPLAIN để phân tích truy vấn Việc sử dụng EXPLAIN hết sức đơn giản, chỉ cần thêm nó vào trước SELECT trong câu truy vấn. Trước tiên hãy cùng tìm hiểu kết quả trả về của một câu truy vấn đơn giản để bạn có thể làm quen với các cột trong bảng kết quả.
Bạn có thể bổ sung thêm từ khóa EXTENDED sau EXPLAIN và MySQL sẽ đưa ra các thông tin bổ sung về quá trình thực hiện truy vấn. Để xem chi tiết, thực hiện lệnh SHOW WARNINGS ngay sau lệnh EXPLAIN. Nó thường được dùng để xem các câu truy vấn được thực hiện sau bất cứ thay đổi nào được tạo ra bởi Query Optimizer.
5.Đếm có bao nhiêu dữ liệu trả về Việc đếm xem có bao nhiêu dữ liệu trả về rất quan trọng, nó giúp bạn so sánh được số truy vấn tính toán và số truy vấn thực tế. Nhằm tìm ra nguyên
nhân và tối ưu truy vấn của bạn. Bạn có thể đọc số truy vấn trong file Log hoặc ví dụ như trong Rails có 1 số Gem có thể đếm số truy vấn: 6.Chấp nhận dư thừa dữ liệu Một thiết kế dữ liệu theo dạng chuẩn có thể rất đẹp mắt, nhưng khi truy vấn dữ liệu, chúng ta sẽ phải xới tung nhiều bảng quan hệ có khi chỉ để lấy ra một record. Ngày xưa, khi giá thành ổ cứng quá cao, dung lượng ổ cứng bé tẹo nên các cụ phải thiết kế dữ liệu ở dạng tiêu chuẩn cao nhằm giảm dung lượng lưu trữ, nhưng ngày nay, dung lượng lưu trữ không còn là vấn đề đáng lo lắng, vì vậy trong một số trường hợp, hãy chịu khó hi sinh tính đẹp đẽ của chuẩn để tăng tốc độ truy vấn. Nên nhớ rằng truy vấn trên một bảng sẽ nhanh hơn rất nhiều lần khi truy vấn trên nhiều bảng quan hệ. 7.Dùng nhiều inserts nếu có thể Bạn có rất nhiều truy vấn INSERT để chạy cùng một lúc? Tại sao không gửi tất cả đến MySQL cùng lúc. Nó sẽ được thực hiện nhanh hơn rất nhiều. Điều đó đặc biệt hữu ích khi thực hiện nhập nhiều dữ liệu cùng lúc. 8.Chỉ dùng DISTINCT khi cần Đặt từ khóa DISTINCT trong câu lệnh SELECT sẽ loại bỏ các kết quả trùng lặp trong số những kết quả trả về của câu truy vấn. Nó khiến máy chủ SQL phải thực hiện thêm thao tác SORT để sắp xếp dữ liệu nhằm nhận biết và loại bỏ các bản trùng lặp. Vì thế, nếu bạn biết trước các kết quả trả về sẽ không trùng lặp thì không nên dùng từ khóa DISTINCT trong câu lệnh SQL. Với việc sử dụng từ khóa DISTINCT trong câu truy vấn, bạn đã yêu cầu máy chủ SQL thực hiện thao tác sắp xếp vào loại bỏ các kết quả trùng lặp. Đây là phần công việc phụ thêm của máy chủ SQL và không có ý nghĩa gì nếu tập hợp kết quả của bạn chỉ bao gồm những bản ghi độc nhất. 9.Chỉ dùng UNION khi cần Cũng giống như trường hợp từ khóa DISTINCT, toán tử UNION đòi hỏi thêm thao tác SORT để máy chủ SQL có thể loại bỏ những kết quả trùng lặp. Nếu bạn biết trước danh sách kết quả trả về không có kết quả nào giống nhau thì thao tác sắp xếp mà máy chủ SQL phải thực hiện trở nên không cần thiết. Bởi vậy khi bạn cần dùng toán tử UNION để nối hai tập hợp bản ghi với nhau, trong đó các bản ghi là độc nhất không trùng lặp, tốt hơn bạn nên dùng toán tử UNION ALL. Toán tử UNION ALL không loại bỏ các bản ghi trùng lặp bởi vậy sẽ giảm nhẹ phần công việc cho máy chủ SQL trong quá trình xử lý do không phải thực hiện thao tác sắp xếp. Giảm bớt công việc cho máy chủ SQL đồng nghĩa với việc thao tác xử lý sẽ được thực hiện nhanh hơn. 10.Sử dụng loại(type) trường(field) chính xác cho dữ liệu Nên sử dụng đúng loại dữ liệu cho thuộc tính của bản dữ liệu, nhằm tránh tốn bộ nhớ. Ví dụ: Để lưu điểm môn học, sử dụng TINYINT tốt hơn INTERGER. Nó chiếm ít không gian lưu trữ trên máy chủ của bạn. 11.Giải phóng bộ nhớ ngay sau khi sử dụng xong Ngày nay đa số các ngôn ngữ lập trình sẽ tự động giải phóng bộ nhớ sau khi chạy toàn bộ chương trình. 12.Áp dụng các thói quen tốt để code nhanh hơn Có rất nhiều lý do để tập luyện cho mình quen với lối viết code tối ưu. Điều đó sẽ giúp bạn tránh được rủi ro có thể xảy ra khi cơ sở dữ liệu thay đổi, đồng thời cải thiện hiệu suất làm việc của máy chủ nhờ giảm thiểu lưu lượng truyền tải qua mạng. Nguồn tham khảo: 7-cach-de-dang-de-tang-toc-do-mysql toi-uu-truy-van-csdl-sql-server |