Hướng dẫn how to make query faster in mysql - cách làm cho truy vấn nhanh hơn trong mysql
Đây là một cái nhìn nhanh chóng và toàn diện về cách cải thiện hiệu suất truy vấn MySQL theo những cách đơn giản Show
MySQL là Hệ thống quản lý cơ sở dữ liệu quan hệ nguồn mở được tìm kiếm nhiều nhất (RDBMS) sử dụng ngôn ngữ truy vấn có cấu trúc (SQL). Một truy vấn SQL được chế tạo kém hoặc vô tổ chức hoạt động như một kẻ giết người mạnh mẽ về hiệu suất tổng thể của ứng dụng của bạn. Do đó, điều quan trọng là tối ưu hóa hiệu suất truy vấn của bạn. MySQL đi kèm với các công cụ giúp chúng tôi tối ưu hóa các truy vấn. Hãy cùng đi sâu vào các mẹo thiết yếu và hữu ích để cải thiện truy vấn MySQL về tốc độ và hiệu suất. 1. Tối ưu hóa cơ sở dữ liệu của bạn
Tối ưu hóa các truy vấn MySQL của bạn một mình sẽ không mang lại hiệu suất cơ sở dữ liệu tuyệt vời. Một cơ sở dữ liệu có cấu trúc tốt là rất quan trọng cùng với một truy vấn được tối ưu hóa. Mặt khác, trong trường hợp tăng dữ liệu, hiệu suất cơ sở dữ liệu sẽ bị ảnh hưởng xấu. Các chiến lược sau đây sẽ giúp bạn tối ưu hóa cơ sở dữ liệu của bạn. một. Bình thường hóa bảng Bình thường hóa là một kỹ thuật thiết kế cơ sở dữ liệu sắp xếp các bảng theo phong cách làm giảm sự dư thừa và sự phụ thuộc của dữ liệu. Nó chia các bảng lớn hơn thành các bảng nhỏ hơn và liên kết chúng bằng các mối quan hệ. Điều này giúp tránh các lĩnh vực sẽ là null. Nó cũng đảm bảo rằng tất cả các trường trong bảng chỉ thuộc về một miền của dữ liệu được mô tả. Ví dụ, trong bảng nhân viên, các trường có thể là ID, tên, số an sinh xã hội, nhưng ba lĩnh vực đó không liên quan gì đến bộ phận. Chỉ ID nhân viên mô tả bộ phận mà nhân viên thuộc về. Vì vậy, điều này ngụ ý rằng bộ phận mà một nhân viên đang ở trong một bảng khác. b. Sử dụng Tối ưu Dữ liệu TypeMysQL hỗ trợ các loại dữ liệu khác nhau và chọn loại chính xác để lưu trữ dữ liệu của bạn là rất quan trọng để có hiệu suất tốt. MySQL hỗ trợ dữ liệu của các loại số, loại ngày và thời gian và các loại chuỗi (ký tự) (số nguyên, float, gấp đôi, ngày, ngày_time, varchar, văn bản, v.v.). Các loại dữ liệu khác nhau phục vụ các mục đích khác nhau. Khi tạo bảng của bạn, bạn cần hiểu loại dữ liệu nào mà mỗi cột sẽ giữ và chọn loại dữ liệu phù hợp nhất. Nếu một trường mong đợi một giá trị ngày, sử dụng kiểu dữ liệu DATE_TIME là tốt nhất vì bạn không phải chạy các hàm phức tạp để chuyển đổi trường cho đến nay khi truy xuất các bản ghi bằng SQL. Sử dụng các giá trị số nguyên nếu bạn mong đợi tất cả các giá trị là số. Khi nói đến tính toán, MySQL có thể làm tốt hơn với các giá trị số nguyên so với các loại dữ liệu văn bản như varchar (lưu trữ chuỗi ký tự có độ dài biến và là loại dữ liệu chuỗi phổ biến nhất). Làm cho độ dài của loại dữ liệu càng nhỏ càng tốt. Ví dụ, Varchar (10) luôn hoạt động tốt hơn Varchar (255). c. Tránh các giá trị null Cho phép các giá trị null (không có bất kỳ giá trị nào trong một cột) trong cơ sở dữ liệu của bạn là một ý tưởng thực sự xấu trừ khi trường có thể có giá trị null một cách hợp lý. Sự hiện diện của giá trị null có thể ảnh hưởng xấu đến kết quả cơ sở dữ liệu của bạn. Chẳng hạn, nếu bạn muốn có được tổng của tất cả các đơn đặt hàng trong cơ sở dữ liệu, kết quả dự kiến có thể hoạt động tồi tệ nếu một bản ghi đơn hàng cụ thể có số tiền null. Loại hành vi sai trái này có thể không chỉ xảy ra nếu bạn đã sử dụng câu lệnh MySQL 'IFNULL' để trả về giá trị thay thế. d. Tránh quá nhiều cột Nhược điểm lớn nhất để có nhiều cột là thêm IO và lưu trữ trên đầu. Các bảng rộng có thể cực kỳ tốn kém và gây ra chi phí lưu trữ. Đó là lý tưởng không để vượt trên một trăm trừ khi logic kinh doanh của bạn đặc biệt đòi hỏi điều này. Trái ngược với việc tạo ra một bảng rộng, tách nó ra thành các cấu trúc logic có thể có lợi. Giả sử bạn đang tạo ra một bảng nhân viên. Trong một số trường hợp nhất định, bạn nhận ra rằng một nhân viên có thể có nhiều địa chỉ. Sau đó, tốt hơn là tạo một bảng riêng để nhập các địa chỉ của nhân viên tham khảo bảng nhân viên bằng trường 'nhân viên_id'. Tránh sử dụng từ khóa của**và chỉ định dữ liệu cần thiết trong mệnh đề chọn. Điều này có thể giúp giảm việc sử dụng mạng trong khi tìm nạp dữ liệu lớn. 2. Tối ưu hóa tham gia
3. Chỉ mục tất cả các cột được sử dụng trong 'WHERE', 'Order by' và 'Group by'Chỉ mục. Chỉ số cơ sở dữ liệu là một cấu trúc dữ liệu cải thiện tốc độ hoạt động trong bảng. Các chỉ mục có thể được tạo bằng cách sử dụng một hoặc nhiều cột, cung cấp cơ sở cho cả việc tra cứu ngẫu nhiên nhanh chóng và thứ tự hiệu quả truy cập vào hồ sơ. Khi tạo một chỉ mục, các điều kiện bình đẳng trong các điều kiện ở đâu và tham gia là thực sự quan trọng. Chẳng hạn, các điều kiện như name = ‘John, sẽ cho phép cơ sở dữ liệu lọc hầu hết các hàng từ bảng và chạy qua một số lượng nhỏ các hàng để trả về các kết quả cần thiết. Do đó, chúng ta nên bắt đầu lập chỉ mục bằng cách thêm các cột này vào chỉ mục. Sau đó, bạn chỉ nên thêm một trong những điều kiện phạm vi chọn lọc nhất vì MySQL có thể xử lý nhiều hơn trong số chúng. Trong một số trường hợp khi không có điều kiện phạm vi, việc thêm nhóm theo / đặt hàng là hợp lý, giả sử đặt hàng chỉ được thực hiện theo một hướng (ASC / DESC). Nhóm theo mệnh đề được sử dụng để đặt hàng kết quả và do đó nếu: clause is used for ordering the result and hence if: -Thứ tự chính xác của chỉ mục được sử dụng các cột ngoài cùng bên trái OR được sử dụng trong nhóm theo nhóm-cột ngoài cùng bên trái được sử dụng trong đó mệnh đề và phần còn lại theo đúng thứ tự trong nhóm theo chỉ số mệnh đề sẽ được sử dụng. Cố gắng áp dụng chỉ số lực nếu MySQL không sử dụng chỉ mục thích hợp. Hiệu suất của từng chỉ số có thể được quan sát bằng cách sử dụng câu lệnh giải thích. 4. Sử dụng các tìm kiếm toàn vănTìm kiếm toàn văn bản (FTS) MySQL nhanh hơn nhiều so với các truy vấn sử dụng ký tự đại diện. Để thêm một chỉ mục tìm kiếm toàn văn vào bảng mẫu của sinh viên, chúng tôi có thể sử dụng lệnh MySQL bên dưới: mysql> sinh viên bảng thay đổi thêm fulltext (first_name, last_name); mysql> chọn * từ các sinh viên nơi khớp (first_name, last_name) chống lại ('jones'); Trong ví dụ trên, chúng tôi đã chỉ định các cột mà chúng tôi muốn được khớp (First_name và Last_Name) với từ khóa tìm kiếm của chúng tôi ('Jones'). Chỉ có một hàng sẽ được quét ngay cả khi cơ sở dữ liệu của sinh viên của chúng tôi có các hàng lớn và điều này sẽ tăng tốc cơ sở dữ liệu. 5. Tối ưu hóa như tuyên bố với mệnh đề Liên minhHãy xem xét một tình huống khi bạn muốn chạy các truy vấn bằng toán tử so sánh 'hoặc' trên các trường hoặc cột khác nhau trong một bảng cụ thể. Ở đây, nếu bạn sử dụng từ khóa 'hoặc' quá mức trong mệnh đề WHERE, có khả năng trình tối ưu hóa MySQL có thể chọn không chính xác việc quét bảng đầy đủ để truy xuất bản ghi. Nếu bạn có một chỉ mục có thể tối ưu hóa một bên của truy vấn và một chỉ mục khác để tối ưu hóa phía bên kia, một điều khoản liên minh có thể làm cho truy vấn chạy nhanh hơn. Ví dụ; Hãy xem xét một trường hợp bạn đang chạy truy vấn dưới đây với 'First_name' và 'Last_Name' đã được lập chỉ mục:'first_name' and 'last_name' indexed: mysql> chọn * từ các sinh viên trong đó first_name như 'jones%' hoặc last_name như 'jones%'; Truy vấn ở trên có thể chạy chậm hơn rất nhiều so với truy vấn dưới đây sử dụng toán tử công đoàn hợp nhất kết quả của 2 truy vấn nhanh riêng biệt tận dụng các chỉ mục. mysql> Chọn từ các sinh viên trong đó First_name như 'Jones%' Liên minh tất cả đều chọn từ các sinh viên trong đó Last_name thích ' 6. Bộ nhớ đệm truy vấn MySQLNhư chúng ta đã biết, bộ nhớ đệm được sử dụng để cải thiện hiệu suất. Nó sẽ nhanh hơn trang web hoặc ứng dụng. Bộ đệm truy vấn MySQL là một bộ nhớ toàn cầu được chia sẻ giữa các phiên. Truy vấn bộ đệm lưu trữ kết quả của các truy vấn được chọn cho phép trả về truy vấn nhanh nếu nhận được truy vấn giống hệt nhau trong tương lai. Khi máy chủ cho cùng một truy vấn, MySQL hỏi sẽ lấy lại kết quả từ bộ đệm thay vì chạy truy vấn lại. Điều này thực sự sẽ buộc chặt quá trình đáng kể. Các kết quả sẽ được đặt trong bộ nhớ cache bộ nhớ như Memcached hoặc Cassandra. Chỉ thị cấu hình Hãy để chúng tôi kiểm tra cách bật bộ đệm truy vấn trong máy chủ MySQL. Để cho phép bộ nhớ đệm truy vấn, chúng tôi cần thêm các chỉ thị cấu hình sau. 1. Chỉ thị đầu tiên cần thiết để cho phép bộ nhớ đệm truy vấn trong các máy chủ MySQL là query query_cache_size = size. Chỉ thị này cho phép chúng tôi đặt kích thước bộ nhớ được phân bổ cho kết quả truy vấn lưu trữ. Trong một máy chủ điển hình, giá trị mặc định cho chỉ thị này sẽ là ‘0. Nó có nghĩa là bộ đệm truy vấn bị vô hiệu hóa. Để cho phép bộ nhớ đệm truy vấn, chúng tôi cần đặt một số giá trị cho việc này. Chúng ta nên đặt giá trị theo số lượng bộ nhớ chúng ta dự định phân bổ cho bộ nhớ đệm truy vấn. query_cache_type = Tùy chọn Chỉ thị cấu hình tiếp theo cần được đặt để bật bộ nhớ đệm truy vấn là trên query_cache_type = tùy chọn. Sử dụng chỉ thị này, chúng tôi chỉ định loại bộ đệm truy vấn nào chúng tôi đang cài đặt. Có 3 tùy chọn có thể được đặt cho Chỉ thị này. Họ đang: 1) 0 0 0 0: - Nó cho máy chủ nói như sau: Đừng lưu trữ kết quả hoặc truy xuất kết quả từ bộ đệm truy vấn.2) . Nếu chúng ta đặt giá trị cho chỉ thị này là một, nó biểu thị rằng, để lưu trữ tất cả các kết quả truy vấn ngoại trừ các kết quả bắt đầu bằng sql_no_cache.3) Kết quả bộ đệm đó chỉ cho các truy vấn bắt đầu bằng sql_cache chọn. – It tells the server the following: Don’t cache the results in or retrieve results from the query cache. Cho phép lưu trữ truy vấn trong MySQL Chúng ta có thể thiết lập bộ đệm trong định dạng sau. Bạn cần nhập vào mysql.assume rằng, chúng tôi đang thiết lập bộ đệm truy vấn cho 32 MB. Chúng ta cần phải làm những điều sau đây để có được điều này. Bây giờ, chúng ta có thể nối các chỉ thị cấu hình khác như sau: query_cache_size = 268435456query_cache_type = 1Query_cache_limit = 1048576 Các lệnh trên ngụ ý kích thước tối đa của kết quả truy vấn riêng lẻ. Kích thước bộ nhớ được đặt trong KB. Kết luận Hướng dẫn này, tôi đã chỉ cho bạn cách tối ưu hóa máy chủ MySQL của bạn. Thực hiện theo các bước này cùng với việc tạo bảng cơ sở dữ liệu có cấu trúc tốt chắc chắn sẽ cải thiện hiệu suất truy vấn MySQL của bạn. Làm thế nào tôi có thể làm cho truy vấn mysql chạy nhanh hơn?Mẹo điều chỉnh và tối ưu hóa hiệu suất MySQL.. Cân bằng bốn tài nguyên phần cứng chính .. Sử dụng innodb, không phải myisam .. Sử dụng phiên bản mới nhất của MySQL. .... Cân nhắc sử dụng một công cụ cải tiến hiệu suất tự động .. Tối ưu hóa các truy vấn .. Sử dụng các chỉ mục khi thích hợp .. Các chức năng trong các vị từ .. Tránh % ký tự đại diện trong một vị ngữ .. Làm cách nào để làm cho truy vấn cơ sở dữ liệu của tôi nhanh hơn?Tăng tốc truy vấn SQL và truy xuất dữ liệu nhanh hơn bằng cách sử dụng 23 thủ thuật này ... Thay vì cập nhật, sử dụng trường hợp. .... Giảm quan điểm lồng nhau để giảm độ trễ. .... Dữ liệu trước khi tổ chức. .... Sử dụng bảng temp. .... Tránh sử dụng mã tái sử dụng. .... Tránh tìm kiếm tiêu cực. .... Tránh con trỏ. .... Chỉ sử dụng số lượng cột chính xác bạn cần .. Làm cách nào để sửa các truy vấn chậm trong mysql?Để vô hiệu hóa hoặc bật nhật ký truy vấn chậm hoặc thay đổi tên tệp nhật ký khi chạy, hãy sử dụng các biến hệ thống slow_query_log và slow_query_log_file toàn cầu. Đặt slow_query_log thành 0 để vô hiệu hóa nhật ký hoặc thành 1 để bật nó. Đặt Slow_Query_Log_File để chỉ định tên của tệp nhật ký.use the global slow_query_log and slow_query_log_file system variables. Set slow_query_log to 0 to disable the log or to 1 to enable it. Set slow_query_log_file to specify the name of the log file.
Làm thế nào tôi có thể cải thiện hiệu suất truy vấn SQL?Điều quan trọng là bạn tối ưu hóa các truy vấn của mình để có tác động tối thiểu đến hiệu suất cơ sở dữ liệu ... Xác định các yêu cầu kinh doanh đầu tiên..... Chọn các trường thay vì sử dụng Chọn * .... Tránh chọn khác biệt..... Tạo tham gia với tham gia bên trong (không phải ở đâu) .... Sử dụng nơi thay vì phải xác định các bộ lọc..... Chỉ sử dụng ký tự đại diện ở cuối cụm từ .. |