IMHO Bạn không cần phải chia nhỏ nó ra. Tuy nhiên, nó sẽ được tốt đẹp để lưu trữ nó.
Nếu users
bảng sử dụng MyISAM Storage Engine, bạn có một lợi thế tốt.
Vì MyISAM chỉ lưu trữ các chỉ mục, bạn có thể làm hai việc
- Bạn có thể tạo bộ đệm khóa tùy chỉnh chỉ để tải chỉ mục MyISAM cho
users
bảng
- Bạn có thể lập chỉ mục tên người dùng và mật khẩu để buộc truy vấn chỉ nhấn vào bộ đệm khóa tùy chỉnh đó
Đảm bảo các chỉ mục sau tồn tại cho users
ALTER TABLE users ADD UNIQUE INDEX username_ndx (username);
ALTER TABLE users ADD UNIQUE INDEX username_password_ndx (username,password);
Có hai (2) lý do chính cho hai chỉ số
LÝ DO cho chỉ số # 1
Chỉ mục username_ndx
ngăn tên người dùng có nhiều mật khẩu, cũng như ngăn nhiều người dùng có cùng tên
LÝ DO cho chỉ số # 2
Các chỉ số username_password_ndx
cung cấp một chỉ số bao gồm . Do đó, truy vấn của bạn sẽ tra cứu tên người dùng và mật khẩu chỉ trong bộ đệm MyISAM tùy chỉnh, thay vì kiểm tra bảng.
Liên kết khác về các nguyên tắc của chỉ số bao phủ
Điều tiếp theo là thực sự tạo bộ đệm khóa tùy chỉnh đó. Dưới đây là các lệnh để tạo bộ đệm chính 8 MB và tải bộ đệm chính dành riêng đó (Ví dụ: Nếu bảng là mydb.users
):
SET GLOBAL authentication_cache.key_buffer_size = 1024 * 1024 * 8;
CACHE INDEX mydb.users IN authentication_cache;
LOAD INDEX INTO CACHE mydb.users;
Bạn nên đặt ba dòng này trong tệp /var/lib/mysql/startup.sql
Thêm phần này vào /etc/my.cnf
[mysqld]
init-file=/var/lib/mysql/startup.sql
Điều này sẽ tải bộ đệm mỗi khi khởi động mysql
Hãy thử một lần !!!
CẬP NHẬT 2011-12-30 17:25 EDT
Nếu bạn muốn lấy kích thước chính xác để đặt bộ đệm, hãy sử dụng truy vấn sau:
SELECT CONCAT('1024 * 1024 * ',ROUND(index_length/power(1024,2))) RecommendedCacheSize
FROM information_schema.tables WHERE table_name='users';
CẬP NHẬT 2011-12-30 23:21 EDT
Đây là một phương pháp dựa trên InnoDB
Bạn vẫn cần các chỉ mục
ALTER TABLE users ADD UNIQUE INDEX username_ndx (username);
ALTER TABLE users ADD UNIQUE INDEX username_password_ndx (username,password);
Bạn phải đảm bảo Bộ đệm InnoDB có tên người dùng và mật khẩu khả dụng. Bạn có thể phải dùng đến việc quét toàn bộ chỉ mục khi khởi động mysql:
Bước 1) Tạo ReadUserPass.sql
echo "select username,password from users;" > /var/lib/mysql/ReadUserPass.sql
Bước 2) Thêm tập lệnh đó vào /etc/my.cnf
[mysqld]
init-file=/var/lib/mysql/ReadUserPass.sql
Bước 3) Thực hiện một trong những điều sau đây
$ service mysql restart
mysql> source /var/lib/mysql/ReadUserPass.sql
Vì cả hai cột này (tên người dùng và mật khẩu) đều nằm trong username_password_ndx
, tất cả các trang chỉ mục tạo nên chỉ mục này được tải lại vào Nhóm đệm của InnoDB. Điều này là cần thiết bởi vì có khả năng của các trang chỉ mục được tuôn ra. Để giảm thiểu điều đó xảy ra, hãy tăng Kích thước vùng đệm và khởi động lại mysql (một lần).