我在AWS中有一個生產數據庫,但localhost中的相同數據庫要快得多(25s VS 7s),做了一些研究,我發現在同一個SQL中有一個差異:不同的key_len結果在相同的數據庫中(不同的環境)
EXPLAIN extended
SELECT *
FROM pipeline p
JOIN invoice i ON p.invoice_id = i.id
WHERE i.whenCreated BETWEEN "2017-01-01 00:00:00" AND "2017-01-31 00:00:00"
在AWS =====> key_len = 8和額外=使用其中。
在localhost ==> key_len = 5和Extra =使用索引條件。
我在這兩個網站之前跑:
OPTIMIZE TABLE invoice;
也許這是一個配置問題,但我迷路了。
更多信息:
MySQL版本在AWS:46年5月5日
MySQL版本在本地主機:5.6.24
在AWS解釋:
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: i
type: range
possible_keys: PRIMARY,IDX_5FD82ED84DD79520
key: IDX_5FD82ED84DD79520
key_len: 8
ref: NULL
rows: 847
filtered: 100.00
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: p
type: ref
possible_keys: UNIQ_848ABB8F2989F1FD
key: UNIQ_848ABB8F2989F1FD
key_len: 5
ref: ontrocrm.i.id
rows: 1
filtered: 100.00
Extra: Using where
解釋在本地主機:
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: i
type: range
possible_keys: PRIMARY,IDX_5FD82ED84DD79520
key: IDX_5FD82ED84DD79520
key_len: 5
ref: NULL
rows: 847
filtered: 100.00
Extra: Using index condition
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: p
type: ref
possible_keys: UNIQ_848ABB8F2989F1FD
key: UNIQ_848ABB8F2989F1FD
key_len: 5
ref: ontrocrm.i.id
rows: 1
filtered: 100.00
Extra: NULL
創建表在兩個相同的,一個是從其他備份:
CREATE TABLE `invoice` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`number` int(11) NOT NULL,
`whenCreated` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_number` (`number`),
KEY `IDX_5FD82ED84DD79520` (`whenCreated`)
)
非常感謝,非常有用的答案。 – Cyrus