長久以來大多數MySQL的用戶認為它沒有functional
index,當我們在where條件的比對值中放入函式,它就只能做全表掃瞄,例如: select * from
sakila.payment where month(payment_date) = 2; 我們想查2月支付的款項,MySQL
的優代器只能做全表掃瞄.這個問題在5.7版以後己經不是個問題了.
我們看看這個例子:
在sakila demo database 中未加functional index到payment表時,我們的表結構如下:
mysql> show create table payment\G ***************************
1. row ***************************
Table: payment Create Table:
CREATE TABLE `payment` ( `payment_id` smallint(5) unsigned
NOT NULL AUTO_INCREMENT, `customer_id` smallint(5)
unsigned NOT NULL, `staff_id` tinyint(3) unsigned NOT
NULL, `rental_id` int(11) DEFAULT NULL, `amount`
decimal(5,2) NOT NULL, `payment_date` datetime NOT NULL, …
[获取更多]