MySQL5.7 虛擬列實現表達式或函數索引
阿新 • • 發佈:2017-07-19
nic time ssi http partition add const .com 索引
MySQL5.7 虛擬列實現表達式或函數索引
http://www.linuxidc.com/Linux/2015-11/125162.htm
可以用來做函數索引,也可稱為表達式索引,也就是基於字段以特定函數(表達式)建立索引來提升查詢性能之需。函數索引的優勢在於更加精確的獲取所需要的數據。
CREATE TABLE t1 ( id INT PRIMARY KEY , rank INT, log_time DATETIME, nickname VARCHAR (64), log_date DATE AS (DATE(log_Time)) stored ) ENGINE INNODB ;ALTER TABLE t1 ADD KEY idx_log_date(log_date);
或者
CREATE TABLE t1 ( id INT PRIMARY KEY , rank INT, log_time DATETIME, nickname VARCHAR (64) ) ENGINE INNODB ; ALTER TABLE t1 ADD COLUMN log_date DATE AS (DATE(log_Time)) stored; ALTER TABLE t1 ADD KEY idx_log_date(log_date);
這樣,增加了一新列,用來存放date(log_time)這個表達式,並且給他加了一列索引。
那麽,之前的語句就變成如下:
mysql> SELECT * FROM t1 WHERE log_date = ‘2015-04-09‘\G *************************** 1. row *************************** id: 95 rank: 24 log_time: 2015-04-09 05:53:13 nickname: test log_date: 2015-04-09 *************************** 2. row *************************** id: 3423 rank:42 log_time: 2015-04-09 02:55:38 nickname: test log_date: 2015-04-09 2 rows in set (0.00 sec)
執行後結果集和之前的一致。
我們來看看查詢計劃,發現很好的利用了 idx_log_date 索引列。
mysql> explain SELECT * FROM t1 WHERE log_date = ‘2015-04-09‘\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 partitions: NULL type: ref possible_keys: idx_log_date key: idx_log_date key_len: 4 ref: const rows: 2 filtered: 100.00 Extra: NULL 1 row in set, 1 warning (0.00 sec)
利用到idx_log_date 索引
MySQL5.7 虛擬列實現表達式或函數索引