SQL: hiệu suất kém mặc dù có chỉ mục

Tôi vừa gặp phải sự cố hiệu suất sau của cơ sở dữ liệu SQL: Trong bảng SQL có tên "người dùng" với ~ 1.000.000 mục nhập, phải mất 28 giây không thể chấp nhận được để xác định số lượng đăng ký ngày hôm nay. Trong cột "đã tạo", thời gian của các đăng ký được lưu ở định dạng "Ymd H: i: s".


Truy vấn được sử dụng

SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';

dẫn đến thời gian tải này, mặc dù đã có chỉ mục trong cột "được tạo" của định dạng DATETIME

ALTER TABLE `users` ADD INDEX `created` (`created`);

đã được thiết lập. Lý do cho hiệu suất kém là lệnh gọi hàm DATE: Cột được lập chỉ mục “đã tạo” được gửi bởi hàm DATE và làm cho chỉ mục không hiệu quả. Trình tối ưu hoá Truy vấn chỉ biết "đã tạo", nhưng không biết kết quả của DATE (đã tạo). Truy vấn được tối ưu hóa

SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';

dẫn đến kết quả mong muốn trong thời gian 0,4 giây.

Trở lại