mysql 基於規則的執行計劃(二)
上篇文章說mysql還在用基於規則的優化器,是我的誤解,裡面涉及到Covering Index,獲取資料的方式,Cost的計算等等,總之,剛從oracle來搞mysql,兩者差別還是挺大的:
The STRAIGHT_JOIN keyword forces the join to proceed in the order specified
in the query. Here’s the EXPLAIN output for the revised query:
in the query. Here’s the EXPLAIN output for the revised query:
mysql> explain
-> SELECT STRAIGHT_JOIN film.film_id, film.title, film.release_year, actor.actor_id,
-> actor.first_name, actor.last_name
-> FROM sakila.film
-> INNER JOIN sakila.film_actor USING(film_id)
-> INNER JOIN sakila.actor USING(actor_id);
+----+-------------+------------+--------+------------------------+----------------+---------+----------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+------------------------+----------------+---------+----------------------------+------+-------------+
| 1 | SIMPLE | film | ALL | PRIMARY | NULL | NULL | NULL | 994 | |
| 1 | SIMPLE | film_actor | ref | PRIMARY,idx_fk_film_id | idx_fk_film_id | 2 | sakila.film.film_id | 1 | Using index |
| 1 | SIMPLE | actor | eq_ref | PRIMARY | PRIMARY | 2 | sakila.film_actor.actor_id | 1 | |
+----+-------------+------------+--------+------------------------+----------------+---------+----------------------------+------+-------------+
3 rows in set (0.00 sec)
-> SELECT STRAIGHT_JOIN film.film_id, film.title, film.release_year, actor.actor_id,
-> actor.first_name, actor.last_name
-> FROM sakila.film
-> INNER JOIN sakila.film_actor USING(film_id)
-> INNER JOIN sakila.actor USING(actor_id);
+----+-------------+------------+--------+------------------------+----------------+---------+----------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+------------------------+----------------+---------+----------------------------+------+-------------+
| 1 | SIMPLE | film | ALL | PRIMARY | NULL | NULL | NULL | 994 | |
| 1 | SIMPLE | film_actor | ref | PRIMARY,idx_fk_film_id | idx_fk_film_id | 2 | sakila.film.film_id | 1 | Using index |
| 1 | SIMPLE | actor | eq_ref | PRIMARY | PRIMARY | 2 | sakila.film_actor.actor_id | 1 | |
+----+-------------+------------+--------+------------------------+----------------+---------+----------------------------+------+-------------+
3 rows in set (0.00 sec)
mysql> SHOW STATUS LIKE 'last_query_cost';
+-----------------+-------------+
| Variable_name | Value |
+-----------------+-------------+
| Last_query_cost | 2197.800000 |
+-----------------+-------------+
1 row in set (0.01 sec)
+-----------------+-------------+
| Variable_name | Value |
+-----------------+-------------+
| Last_query_cost | 2197.800000 |
+-----------------+-------------+
1 row in set (0.01 sec)
mysql> explain
-> SELECT film.film_id, film.title, film.release_year, actor.actor_id,
-> actor.first_name, actor.last_name
-> FROM sakila.film
-> INNER JOIN sakila.film_actor USING(film_id)
-> INNER JOIN sakila.actor USING(actor_id);
+----+-------------+------------+--------+------------------------+---------+---------+---------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+------------------------+---------+---------+---------------------------+------+-------------+
| 1 | SIMPLE | actor | ALL | PRIMARY | NULL | NULL | NULL | 200 | |
| 1 | SIMPLE | film_actor | ref | PRIMARY,idx_fk_film_id | PRIMARY | 2 | sakila.actor.actor_id | 1 | Using index |
| 1 | SIMPLE | film | eq_ref | PRIMARY | PRIMARY | 2 | sakila.film_actor.film_id | 1 | |
+----+-------------+------------+--------+------------------------+---------+---------+---------------------------+------+-------------+
3 rows in set (0.00 sec)
-> SELECT film.film_id, film.title, film.release_year, actor.actor_id,
-> actor.first_name, actor.last_name
-> FROM sakila.film
-> INNER JOIN sakila.film_actor USING(film_id)
-> INNER JOIN sakila.actor USING(actor_id);
+----+-------------+------------+--------+------------------------+---------+---------+---------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+------------------------+---------+---------+---------------------------+------+-------------+
| 1 | SIMPLE | actor | ALL | PRIMARY | NULL | NULL | NULL | 200 | |
| 1 | SIMPLE | film_actor | ref | PRIMARY,idx_fk_film_id | PRIMARY | 2 | sakila.actor.actor_id | 1 | Using index |
| 1 | SIMPLE | film | eq_ref | PRIMARY | PRIMARY | 2 | sakila.film_actor.film_id | 1 | |
+----+-------------+------------+--------+------------------------+---------+---------+---------------------------+------+-------------+
3 rows in set (0.00 sec)
mysql> SHOW STATUS LIKE 'last_query_cost';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| Last_query_cost | 440.999000 |
+-----------------+------------+
1 row in set (0.00 sec)
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| Last_query_cost | 440.999000 |
+-----------------+------------+
1 row in set (0.00 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758322/viewspace-680925/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 基於規則的執行計劃MySql
- 執行計劃-3:解釋規則
- explain執行計劃中的key_len的計算規則AI
- MySQL 執行計劃MySql
- MySQL執行計劃MySql
- 基於UNION ALL的分頁查詢執行計劃問題(二)
- 執行計劃執行步驟原則
- mysql執行計劃explainMySqlAI
- mysql explain 執行計劃MySqlAI
- MySQL執行計劃解析MySql
- 檢視執行計劃(二)
- MySQL執行計劃解析(四)MySql
- 讀懂MySQL執行計劃MySql
- 讀懂 MySQL 執行計劃MySql
- mysql索引和執行計劃MySql索引
- MySQL中in(常量列表)的執行計劃MySql
- 【MySQL】MySQL的執行計劃及索引優化MySql索引優化
- Oracle檢視執行計劃(二)Oracle
- 帶你看懂MySQL執行計劃MySql
- MySQL Explain執行計劃 - 詳解MySqlAI
- 十六、Mysql之Explain執行計劃MySqlAI
- mysql explain 執行計劃詳解MySqlAI
- MySQL執行計劃EXPLAIN詳解MySqlAI
- drools執行完某個規則後終止別的規則執行
- Oracle訪問索引的執行計劃(二)Oracle索引
- mysql的執行計劃快取問題MySql快取
- drools執行指定的規則
- 管理規則和基於規則的轉換——流
- 基於UNION ALL的分頁查詢執行計劃問題
- 關於索引的執行計劃記載索引
- drools執行String規則或執行某個規則檔案
- mysql調優之——執行計劃explainMySqlAI
- mysql 執行計劃索引分析筆記MySql索引筆記
- (4) MySQL中EXPLAIN執行計劃分析MySqlAI
- mysql主從庫執行計劃不同MySql
- MySQL 5.7獲取指定執行緒正在執行SQL的執行計劃資訊MySql執行緒
- 執行計劃-1:獲取執行計劃
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI