Tôi có một ứng dụng thương mại điện tử sử dụng MySQL và tôi muốn nó nhanh hơn. Khi một phần # được truy cập trên trang web đã được truy cập trước đó, phần tải nhanh vì tất cả các dữ liệu cần thiết đã có trong vùng đệm INNODB. Tuy nhiên, nếu phần # chưa bao giờ được tải trước đó, dữ liệu đó không nằm trong vùng đệm, vì vậy nó cần phải được đọc từ đĩa, và điều đó là chậm. Tôi thiết lập vùng đệm INNODB của tôi là 2GB, và toàn bộ cơ sở dữ liệu này chỉ khoảng 350MB, vì vậy có rất nhiều chỗ để tải toàn bộ cơ sở dữ liệu trong vùng đệm. Tôi có thể thấy từ số liệu thống kê INNODB chỉ khoảng một nửa vùng đệm được sử dụng ngay bây giờ.Làm thế nào để tải trước bảng vào vùng đệm INNODB với MySQL?
Tôi đã tìm thấy các tham chiếu để tải trước dữ liệu, còn được gọi là "khởi động" vùng đệm, chẳng hạn như Quickly preloading Innodb tables in the buffer pool hoặc mysqldump.azundris.com/archives/70-Innodb-cache-preloading-using-blackhole .html. Chiến lược về cơ bản liên quan đến việc buộc phải quét bảng trên mỗi bảng vì MySQL không có cách nào để tải trước dữ liệu.
Tôi không muốn tạo thủ công một tập lệnh liệt kê mọi bảng trong cơ sở dữ liệu của tôi và phải thực hiện việc này. Làm cách nào tôi có thể tạo tập lệnh đi qua và tự động chọn cho mỗi bảng và tự động chọn một cột không được lập chỉ mục để thực hiện quét bảng?
thuật toán này đơn giản và súc tích. Điều này sẽ cache dữ liệu innodb. Tôi không chắc chắn nếu điều này sẽ cache tất cả các trang chỉ mục innodb, nhưng thuật toán của bạn có thể nhanh chóng được áp dụng để làm như vậy. Tôi tin rằng MyISAM chỉ lưu trữ các trang chỉ mục MYI. Một lần nữa, thuật toán của bạn tạo cơ sở để đi qua các bảng và các chỉ mục. Bravo (và +1) !!!! – RolandoMySQLDBA
Mỏ chỉ thực hiện để nhận danh sách truy vấn. Ý tưởng xuất phát từ Blog Hiệu suất Mysql được liên kết trong Câu hỏi. – Mchl