,

Nhận được đơn hàng trước tết tối ưu cho một website tin tức, trong trang là hàng triệu bài viết cho nên bất kì một sai sót nào cũng có thể dẫn tới load chậm, mà nó chậm ghê gớm lắm, 10 giây load xong, khách chạy mất dép !

Tôi vào tham quan một vòng, debug các hàm PHP thì thấy chúng chạy cực nhanh, khoảng 0.1 giây là chậm nhất rồi, vấn đề nó ở đâu ?

Lật qua vấn đề, truy vấn cơ sở dữ liệu là cái thứ chậm nhất trong một website, và coder dù có giỏi tới mấy thì vẫn hay dính các vấn đề tốc độ trong các câu lệnh này !

Đây rồi, có một đoạn như thế này:

Select Post_ID from %s where title = '%s'

Đây là câu lệnh chọn các bài viết liên quan, trong khi chỉ hiển thị có 10 bài viết liên quan mà chơi thế này thì vỡ mồm, dù PHP có limit được số trả về, thì SQL nó cũng trả về tất thảy các dữ liệu, tôi thêm LIMIT 10 sau câu lệnh thì hàm này trả về 0.01 giây thay vì 4 giây như trước, phù:

Select Post_ID from %s where title = '%s' LIMIT 10

Trong khi, một hàm khác kiểm tra sự hiện diện của bài đăng đã có chưa trong cơ sở dữ liệu:

Select * from %s where URL = '%s'

Trời đất, hàm này ngốn mất 4 giây tiếp theo, có lúc còn hơn nhiều, và vì nó chỉ kiểm tra sự hiện diện của dữ liệu, hãy cho LIMIT 1 vào trong câu lệnh:

Select * from %s where URL = '%s' LIMIT 1

Câu lệnh chạy qua hàng triệu ROW và trả về trong 0.06 giây, kỉ lục chưa !

Tốc độ của một website không những là do các thành phần HTML, CSS hay JAVASCRIPT, mà nó còn nằm trong các đoạn code không được tối ưu, nếu các bạn không tối ưu SQL mà lại đặt trong vòng lặp while hay for nữa thì chậm thôi rồi ngay, dù chênh nhau có 0.001 giây thì chạy qua hàng ngàn bảng hay chạy trong vòng lặp nó cũng lên vài giây ngay !

Chúc các bạn thành công !

Tôi là Jam, thâm niên 7 năm thiết kế website và làm seo, nếu các bạn thấy bài viết hay thì hãy chia sẻ cho những người khác cùng tham khảo, còn nếu muốn thiết kế website hoặc sửa web hay đặt một plugin có chức năng đặc biệt, hãy liên hệ ngay tới Jam ( thông tin ở chân trang )

Bài viết liên quan

  1. Kết nối database trong WordPress - 21-05-2016 02:05
  2. Trích xuất SQL qua SSL gặp đủ các loại lỗi trên Server Linux ! - 26-12-2015 00:12
  3. Cài đặt MySQL sao cho tiết kiệm bộ nhớ nhất - 02-12-2015 19:12

7 thoughts on “Đừng bao giờ quên LIMIT trong các câu lệnh MYSQL !”

  1. Select * from %s where URL = ‘%s’ LIMIT 1 hay Select * from %s where URL = ‘%s’ thì kết quả trả về đều là 1 dòng dữ liệu, vì điều kiện = của nó chỉ trả về kết quả duy nhất, nên 2 câu lệnh này thời gian load như nhau, thiết nghĩ limit 1 là thừa, Jam trình còn non lắm

    1. Khi có 500 ngàn bảng dữ liệu trở lên, tốc độ sẽ khác hoàn toàn vì Limit 1 sẽ dừng lại khi thấy 1 row đạt tiêu chí, còn không có limit thì nó sẽ quét toàn bộ bảng và tìm tất cả các yêu cầu thỏa mãn, cho nên các bảng lớn nó sẽ ngốn tới 2 giây hoặc 4 giây để tìm !

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Lưu ý: Không đăng thông tin cá nhân của bạn như email hay số điện thoại để không bị quấy rầy, tham khảo thêm quy định khi comment !