10 兩表優(yōu)化案例

創(chuàng)建表

#class表
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `card` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

#book
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
  `book_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `card` int(10) unsigned NOT NULL,
  PRIMARY KEY (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SQL語句

mysql> explain SELECT * from class c LEFT JOIN book b ON  c.card = b.card;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | c     | ALL  | NULL          | NULL | NULL    | NULL |   20 |       |
|  1 | SIMPLE      | b     | ALL  | NULL          | NULL | NULL    | NULL |    9 |       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
2 rows in set (0.00 sec)


在左表建立索引

mysql> show index from class;
+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name       | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| class |          0 | PRIMARY        |            1 | id          | A         |          20 |     NULL | NULL   |      | BTREE      |         |               |
| class |          1 | idx_class_card |            1 | card        | A         |          20 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)


mysql> explain SELECT * from class c LEFT JOIN book b ON  c.card = b.card;
+----+-------------+-------+-------+---------------+----------------+---------+------+------+-------------+
| id | select_type | table | type  | possible_keys | key            | key_len | ref  | rows | Extra       |
+----+-------------+-------+-------+---------------+----------------+---------+------+------+-------------+
|  1 | SIMPLE      | c     | index | NULL          | idx_class_card | 4       | NULL |   20 | Using index |
|  1 | SIMPLE      | b     | ALL   | NULL          | NULL           | NULL    | NULL |    9 |             |
+----+-------------+-------+-------+---------------+----------------+---------+------+------+-------------+
2 rows in set (0.00 sec)

在右表建立索引,刪掉左表索引

mysql> show index from book;
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name      | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| book  |          0 | PRIMARY       |            1 | book_id     | A         |           9 |     NULL | NULL   |      | BTREE      |         |               |
| book  |          1 | idx_book_card |            1 | card        | A         |           9 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.01 sec)

mysql> explain SELECT * from class c LEFT JOIN book b ON  c.card = b.card;
+----+-------------+-------+-------+---------------+----------------+---------+-------------+------+-------------+
| id | select_type | table | type  | possible_keys | key            | key_len | ref         | rows | Extra       |
+----+-------------+-------+-------+---------------+----------------+---------+-------------+------+-------------+
|  1 | SIMPLE      | c     | index | NULL          | idx_class_card | 4       | NULL        |   20 | Using index |
|  1 | SIMPLE      | b     | ref   | idx_book_card | idx_book_card  | 4       | db01.c.card |    1 | Using index |
+----+-------------+-------+-------+---------------+----------------+---------+-------------+------+-------------+
2 rows in set (0.00 sec)

在右表建立索引,type變?yōu)閞ef,rows優(yōu)化也比較明顯,這是由左連接特性決定的,left join條件用于確定如何從右表搜索行,左邊一定都有,所以一定要在右表建立索引
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末日缨,一起剝皮案震驚了整個濱河市伏伐,隨后出現(xiàn)的幾起案子要拂,更是在濱河造成了極大的恐慌躬窜,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抬探,死亡現(xiàn)場離奇詭異贵白,居然都是意外死亡,警方通過查閱死者的電腦和手機贸弥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來海渊,“玉大人绵疲,你說我怎么就攤上這事〕家桑” “怎么了最岗?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朝捆。 經(jīng)常有香客問我,道長懒豹,這世上最難降的妖魔是什么芙盘? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮脸秽,結(jié)果婚禮上儒老,老公的妹妹穿的比我還像新娘。我一直安慰自己记餐,他們只是感情好驮樊,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著片酝,像睡著了一般囚衔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雕沿,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天练湿,我揣著相機與錄音,去河邊找鬼审轮。 笑死肥哎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疾渣。 我是一名探鬼主播篡诽,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榴捡!你這毒婦竟也來了杈女?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碧信,沒想到半個月后赊琳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡砰碴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年躏筏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呈枉。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡趁尼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猖辫,到底是詐尸還是另有隱情酥泞,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布啃憎,位于F島的核電站芝囤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辛萍。R本人自食惡果不足惜悯姊,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贩毕。 院中可真熱鬧悯许,春花似錦、人聲如沸辉阶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谆甜。三九已至垃僚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間店印,已是汗流浹背冈在。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留按摘,地道東北人包券。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像炫贤,于是被迫代替她去往敵國和親溅固。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容