我在閱讀高性能MySQL:優化,備份和複製通過Schwartz,Zaitsev & Tkachenko(第3版,Oreilly)。迄今爲止,這本書很棒。不過,我在Chapter 5 on page 183中遇到了不一致(對於長鏈接抱歉,Google Books不會給我一個更好的鏈接)。使用Sakila sample database的「租賃」表,我們執行一些SELECT查詢,這些查詢應該使用索引來掃描和排序結果。在我的MySQL 5.5服務器上,當我運行Google Books上顯示的突出顯示的查詢時,它似乎沒有像預期的那樣使用rental_date索引。MySQL索引掃描排序不工作
這是本書中的一個錯誤,是MySQL版本之間的區別?
相關的表結構:
CREATE TABLE rental (
`rental_id` int(11) NOT NULL AUTO_INCREMENT,
`rental_date` datetime NOT NULL,
`inventory_id` mediumint(8) unsigned NOT NULL,
`customer_id` smallint(5) unsigned NOT NULL,
...
PRIMARY KEY (rental_id),
UNIQUE KEY rental_date (rental_date,inventory_id,customer_id),
...
) ENGINE=InnoDB;
和有關查詢,正結果我得到:在版本之間的優化
> EXPLAIN SELECT rental_id, staff_id FROM sakila.rental WHERE rental_date > '2005-05-25' ORDER BY rental_date, inventory_id\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: rental
type: ALL
possible_keys: rental_date
key: NULL
key_len: NULL
ref: NULL
rows: 16338
Extra: Using where; Using filesort
1 row in set (0.00 sec)
是'\ G'結束時選擇的東西正常嗎? – Sebas 2013-03-18 23:13:37
@Sebas \ G以這種格式返回查詢結果,而不是像表格那樣;會給你。 – ESG 2013-03-18 23:45:37
'\ G'修飾符只是將輸出格式化爲列表。你可以用傳統的分號替換它。它只會改變格式。 – 2013-03-18 23:46:59