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

Từ góc độ hiệu suất, mức độ hiệu quả khi sử dụng bảng tạm thời MySQL cho một tính năng trang web được sử dụng nhiều?

Những gì bạn đã nêu là hoàn toàn chính xác, bảng tạm thời sẽ chỉ hiển thị cho người dùng / kết nối hiện tại. Tuy nhiên, vẫn còn một số chi phí và một số vấn đề khác như:

  • Đối với mỗi trong số hàng nghìn tìm kiếm, bạn sẽ tạo và điền vào bảng đó (và bỏ nó sau đó) - không phải trên mỗi người dùng, mỗi tìm kiếm. Bởi vì mỗi tìm kiếm rất có thể sẽ thực thi lại tập lệnh và "mỗi phiên" không có nghĩa là phiên PHP - nó có nghĩa là phiên cơ sở dữ liệu (kết nối mở).
  • Bạn sẽ cần CREATE TEMPORARY TABLES đặc quyền mà bạn có thể không có.
  • Tuy nhiên, bảng đó thực sự phải có loại MEMORY, loại này ăn cắp RAM của bạn nhiều hơn mức tưởng tượng. Bởi vì ngay cả khi có VARCHAR, các bảng MEMORY vẫn sử dụng lưu trữ hàng có độ dài cố định.
  • Nếu sau này, heuristics của bạn cần tham khảo bảng đó hai lần (như SELECT xyz FROM patternmatch AS pm1, patternmatch AS pm2 ... ) - điều này không thể thực hiện được với bảng MEMORY.

Tiếp theo, sẽ dễ dàng hơn cho bạn - và cả cho cơ sở dữ liệu - thêm LIKE '%xyz%' trực tiếp đến images của bạn bảng WHERE mệnh đề. Nó sẽ hoạt động tương tự mà không cần tạo BẢNG NHỚ và tham gia nó.

Trong mọi trường hợp - cho dù bạn đi theo con đường nào - thì ĐÂU sẽ chậm kinh khủng. Ngay cả khi bạn thêm chỉ mục trên images.name rất có thể bạn sẽ cần LIKE '%xyz%' thay vì LIKE 'xyz%' , vì vậy chỉ mục đó sẽ không được sử dụng.

Không. :)

Tùy chọn thay thế

MySQL tích hợp sẵn Fulltext-Search (kể từ 5,6 cũng cho InnoDB) mà thậm chí có thể cho bạn điểm đó:Tôi thực sự khuyên bạn nên đọc và thử. Bạn có thể chắc chắn rằng cơ sở dữ liệu biết rõ hơn bạn cách thực hiện tìm kiếm đó một cách hiệu quả.

Nếu bạn định sử dụng MyISAM thay vì InnoDB, hãy lưu ý hạn chế thường bị bỏ qua là các tìm kiếm FULLTEXT chỉ trả về bất kỳ thứ gì nếu số lượng kết quả ít hơn 50% tổng số hàng trong bảng.

Những thứ khác mà bạn có thể muốn xem, chẳng hạn như Solr (Lời giới thiệu thú vị khi đọc chủ đề đó sẽ là phần mở đầu của http://en.wikipedia.org/wiki/Apache_Solr ). Chúng tôi đang sử dụng nó trong công ty của chúng tôi và nó hoạt động rất tốt, nhưng nó đòi hỏi phải học hỏi khá nhiều.

Tóm tắt

Giải pháp cho chính vấn đề hiện tại của bạn (tìm kiếm) là sử dụng các khả năng FULLTEXT.

Để cung cấp cho bạn một con số, 10.000 cuộc gọi mỗi giây không phải là "tầm thường" - với hàng trăm nghìn lượt tìm kiếm mỗi giây, loại vấn đề hiệu suất bạn sẽ gặp phải ở khắp mọi nơi trong thiết lập của bạn. Bạn sẽ cần một vài máy chủ, cân bằng tải và hàng tấn công nghệ tuyệt vời khác. Và một trong số này sẽ là ví dụ Solr;)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cần kết nối IDX MLS vào một trang web

  2. tìm kiếm các sản phẩm mà khách hàng đã mua cùng nhau

  3. com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:Mục nhập trùng lặp '' cho khóa 'CHÍNH'

  4. MySQL sao chép hiệu quả tất cả các bản ghi từ bảng này sang bảng khác

  5. Đặt hàng trong nhóm theo?