美文网首页ElasticSearch
索引案例二:两表优化案例

索引案例二:两表优化案例

作者: 编程界的小学生 | 来源:发表于2017-03-01 20:53 被阅读20次

建表SQL

CREATE TABLE IF NOT EXISTS class(
    id INT (10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    card INT(10) UNSIGNED NOT NULL
);

CREATE TABLE IF NOT EXISTS book(
    bookid INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    card INT(10) UNSIGNED NOT NULL
);

INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO class(card) VALUE(FLOOR(1 + RAND() * 20));

INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));
INSERT INTO book(card) VALUE(FLOOR(1 + RAND() * 20));

LEFT JOIN

Paste_Image.png Paste_Image.png Paste_Image.png

给左边表(class)加索引出现如下:

Paste_Image.png
可以发现rows检索的行数没变。而且是index索引,索引全部。

给由边表(book)加索引出现如下:

Paste_Image.png
可发现只检索1行,而且是ref,效率极高。
所以加到右表(book)最为合适。

RIGHT JOIN

3.png

发现结果正好相反。

得出结论 :若为左连接,则把索引加到第二张表上的连接字段。若为右连接,则把索引加到第一张表的连接字段。

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg

相关文章

  • 索引案例二:两表优化案例

    建表SQL LEFT JOIN 给左边表(class)加索引出现如下: 给由边表(book)加索引出现如下: RI...

  • mysql-索引优化

    # 单表、两表、三表的优化案例 如何建立索引并优化 -在explain的基础上进行优化: ## 建表 create...

  • Mysql索引优化

    1、单表索引优化 单表索引优化分析 创建表 建表 SQL 表中的测试数据 查询案例 查询category_id为1...

  • 案例加源码:万字长文带你彻底搞懂MySQL的索引优化

    一、索引优化 1,单表索引优化 建表 查询案例 查询category_id为1且comments 大于1的情况下,...

  • 索引优化分析案例

    索引优化分析案例 预先准备好数据 逐步开始进行优化: 第一个案例: 第二个案例

  • 索引案例一:单表优化案例

    SQL如下: 说明:这里只有三条数据,这是一个新闻表,会有百万级别的数据。 问题:查询catrgory_id为1且...

  • 9 索引单表优化案例

    创建表 查询开始 查询category为1且comments大于1的情况下,views最多的article_id ...

  • 10 两表优化案例

    创建表 SQL语句 在左表建立索引 在右表建立索引,删掉左表索引 在右表建立索引,type变为ref,rows优化...

  • MySQL索引优化案例

    开发同学或多或少会遇到系统响应慢的问题,除了业务系统本身的问题外,常常会遇到SQL查询慢的问题,这篇文章结合实际案...

  • 详解MySQL之SQL优化(1)

    MySQL学习笔记(6) SQL优化(1) 优化SQL的一般步骤 本文所涉及案例表来自MySQL的案例库sakil...

网友评论

    本文标题:索引案例二:两表优化案例

    本文链接:https://www.haomeiwen.com/subject/pwecgttx.html