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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 執行計劃-3:解釋規則
- MySQL執行計劃MySql
- MySQL 執行計劃MySql
- 執行計劃執行步驟原則
- MySQL執行計劃解析MySql
- mysql explain 執行計劃MySqlAI
- mysql執行計劃explainMySqlAI
- MySQL執行計劃解析(四)MySql
- 讀懂MySQL執行計劃MySql
- 【MySQL】MySQL的執行計劃及索引優化MySql索引優化
- mysql explain 執行計劃詳解MySqlAI
- 十六、Mysql之Explain執行計劃MySqlAI
- MySQL Explain執行計劃 - 詳解MySqlAI
- 帶你看懂MySQL執行計劃MySql
- drools執行完某個規則後終止別的規則執行
- drools執行指定的規則
- drools執行String規則或執行某個規則檔案
- (4) MySQL中EXPLAIN執行計劃分析MySqlAI
- mysql主從庫執行計劃不同MySql
- mysql 執行計劃索引分析筆記MySql索引筆記
- mysql調優之——執行計劃explainMySqlAI
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- MySql中執行計劃如何來的——Optimizer TraceMySql
- 執行計劃-1:獲取執行計劃
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- MySQL explain執行計劃詳細解釋MySqlAI
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- MySQL 5.7 優化不能只看執行計劃MySql優化
- 理解索引:MySQL執行計劃詳細介紹索引MySql
- SYBASE執行計劃
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- TiDB與MySQL的SQL差異及執行計劃簡析TiDBMySql
- MySQL調優篇 | EXPLAIN執行計劃解讀(4)MySqlAI
- 多執行緒程式設計基礎(二)-- 執行緒池的使用執行緒程式設計
- javascript關於toFixed的計算規則JavaScript
- 基於邏輯規則的圖譜推理
- AliosThings的Flash劃分規則iOS
- 臺灣“中央銀行”計劃為比特幣制定反洗錢規則比特幣