Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hiệu suất CASE trong MySQL?

Khá nhiều tất cả các hàm trên mỗi hàng sẽ có tác động đến hiệu suất, câu hỏi thực sự duy nhất là:"Tác động có đủ nhỏ để không phải lo lắng không?".

Đây là điều bạn nên khám phá bằng cách đo lường hơn là phỏng đoán. Quản trị cơ sở dữ liệu chỉ là một hoạt động thiết lập và quên nếu cả dữ liệu và truy vấn của bạn đều không thay đổi. Nếu không, bạn nên theo dõi hiệu suất định kỳ để đảm bảo không có sự cố nào xảy ra.

Ý tôi là "đủ nhỏ" trong các nhận xét trên, bạn có thể không cần lo lắng về tác động hiệu suất của những thứ như:

select * from friends where lowercase(lastname) = "smith"

nếu bạn chỉ có ba người bạn.

Tác động của những điều này trở nên nghiêm trọng hơn khi bàn tăng kích thước. Ví dụ:nếu bạn có một trăm triệu khách hàng và bạn muốn tìm tất cả những khách hàng có khả năng liên quan đến máy tính, bạn sẽ không muốn thử:

select name from customers where lowercase(name) like '%comp%'

Điều đó có thể khiến bạn bị ảnh hưởng bởi DBA như một tấn gạch.

Một cách mà chúng tôi đã khắc phục điều này trong quá khứ là đưa sự dư thừa vào dữ liệu. Sử dụng ví dụ đầu tiên đó, chúng tôi sẽ thêm một cột bổ sung có tên là lowerlastname và điền nó bằng giá trị chữ thường của lastname . Sau đó lập chỉ mục cho mục đích tìm kiếm và select của bạn các câu lệnh trở nên nhanh chóng mặt, đúng như vậy.

Và điều đó có tác dụng gì với 3NF rất được yêu mến của chúng ta, tôi nghe bạn hỏi? Câu trả lời là "không nhiều", nếu bạn biết mình đang làm gì :-)

Bạn có thể thiết lập cơ sở dữ liệu để cột mới này được điền bởi trình kích hoạt chèn / cập nhật, nhằm duy trì tính nhất quán của dữ liệu. Hoàn toàn có thể chấp nhận được việc phá vỡ 3NF vì lý do hiệu suất, miễn là bạn hiểu và giảm thiểu hậu quả.

Tương tự, truy vấn thứ hai đó có thể có trình kích hoạt chèn / cập nhật đã điền một cột được lập chỉ mục mới name_contains_comp bất cứ khi nào một mục nhập được cập nhật hoặc chèn có chứa văn bản liên quan.

Vì hầu hết các cơ sở dữ liệu được đọc thường xuyên hơn nhiều so với khi chúng được viết, điều này chuyển chi phí tính toán sang phần chèn / cập nhật, mang lại hiệu quả cho nó trên tất cả các hoạt động được chọn. Khi đó, truy vấn sẽ là:

select name from customers where name_contains_comp = 'Y'

Một lần nữa, bạn sẽ thấy truy vấn nhanh chóng mặt với chi phí nhỏ là chèn và cập nhật chậm hơn một chút.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để hiển thị các ký tự UTF-8 trong phpMyAdmin?

  2. MySQL tạo cú pháp thủ tục được lưu trữ với dấu phân cách

  3. Sử dụng mysql concat () trong mệnh đề WHERE?

  4. Sử dụng biểu thức chính quy để xác thực các câu lệnh mysql

  5. Thay thế ký tự đại diện MySQL