2、创建联合索引,从坐到右分别为:userid、openId、name  

2、 #### --------------  多表联合查询 update 2019/03/13  --------------- ####

(8)在Join表的时候使用相同类型的例,并将其索引

如果你的应用程序有很多 JOIN 查询,你应该确认两个表中Join的字段是被建过索引的。这样,MySQL内部会启动为你优化Join的SQL语句的机制。

而且,这些被用来Join的字段,应该是相同的类型的。例如:如果你要把 DECIMAL 字段和一个 INT 字段Join在一起,MySQL就无法使用它们的索引。对于那些STRING类型,还需要有相同的字符集才行。(两个表的字符集有可能不一样)

//在state中查找company

SELECT company_name FROM users

LEFT JOIN companies ON (users.state = companies.state)

WHERE users.id = $user_id"

//两个 state 字段应该是被建过索引的,而且应该是相当的类型,相同的字符集

使用示例:

SQL语句:

EXPLAIN
SELECT sl.*,s.student_name,c.course_name,t.term_name,cl.class_name FROM
cmf_student_score_log sl LEFT JOIN cmf_student s ON s.sno=sl.sno
LEFT JOIN cmf_class_members cm ON sl.sno=cm.sno //红色这两个是走的 单列sno普通索引
LEFT JOIN cmf_class cl ON cl.id=cm.class_id
LEFT JOIN cmf_term t ON t.id=sl.term_id      //橙色这三个是走的id主键索引
LEFT JOIN cmf_course c ON c.id=sl.course_id
WHERE sl.delete_time is NULL
AND sl.status=
ORDER BY sl.term_id DESC,sl.sno ASC
;

结语:加上索引后,性能提升18倍。 0.018s ---> 0.001s

#### --------------  多表联合查询 update 2019/03/13  --------------- ####

【mysql】mysql中单列索引、联合索引、Join联表查询建立索引 和 EXPLAIN的分析使用的更多相关文章

  1. Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  2. join联表查询方法

    $model = Shipping::join('shipping_area', 'shipping_area.shipping_id', '=', 'shipping.shipping_id') - ...

  3. MySQL 联表查询

    关系型数据库,免不了表之间存在各种引用与关联.这些关联是通过主键与外键搭配来形成的.所以,取数据时,很大情况下单张表无法满足需求,额外的数据则需要将其他表加入到查询中来,这便是 JOIN 关键字完成的 ...

  4. mysql中的回表查询与索引覆盖

    了解一下MySQL中的回表查询与索引覆盖. 回表查询 要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Sec ...

  5. MySQL中的联表查询与子查询

    0.准备数据 1.内连接:INNER JOIN 2.左连接:LEFT JOIN 3.右连接:RIGHT JOIN 4.USING子句 扩展知识点: 0.表别名的使用: 1.group by的用法 2. ...

  6. [慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join谁更好时请放手让mysql自行判定

    写在前面的话: 不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程: 不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小: ...

  7. 【转】[慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join谁更好时请放手让mysql自行判定

    转自:http://zhengyun-ustc.iteye.com/blog/1942797 写在前面的话: 不要求每个人一定理解 联表查询(join/left join/inner join等)时的 ...

  8. 了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表

    一.为什么要用小表驱动大表 1.驱动表的定义 当进行多表连接查询时, [驱动表] 的定义为: 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表] 2)未指定联接条件时,行数少的表为[驱动表 ...

  9. 【explain】MySQL联表查询中的驱动表

    写在前面 1.不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程 2.不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小 3 ...

随机推荐

  1. Spring4.0+quartz2.2.1+memcahce多台nginx实现均衡

    1.每台nginx都有公网地址,在域名处设置同个域名多个指向,最简单实现轮洵.但故障切负会慢一点.2.一台公网nginx通过upstream功能,轮洵.ip.url多方式分发到内网多台nginx.但公 ...

  2. mac OS X下配置jdk环境变量

    进入命令行,开始如下操作: cd  ~touch.bash_profile vi  .bash_profile 输入内容jdk变量配置内容: export JAVA_HOME=/Library/Jav ...

  3. int to string

    int i=9; stringstream stream; stream << i;stream.str()

  4. JQuery文件上传及以Base64字符串形式呈现图片

    一:上传之 首先,你必然得有一个 file input,如下: <td>     <img id="imgGif" style="display: no ...

  5. Coursera课程《Python数据结构》中课件

    You can access the Google Drive containing all of the current and in-progress lecture slides for thi ...

  6. 在Xcode中显示代码行号

    打开一个程序,点击屏幕菜单栏的Xcode,然后选Xcode -> Preferences -> Text Editing -> Show line numbers前面打勾就行了. 如 ...

  7. Informatica 常用组件Lookup之九 配置未连接的查找转换

    在映射中,未连接的查找转换与管道是分开的.您可以使用 :LKP 引用限定符编写表达式以调用其它转换中的查找.未连接查找的常用用法包括: 测试表达式中某个查找的结果 基于查找结果过滤行 基于查找的结果将 ...

  8. QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型

    QSqlTableModel类继承至QSqlQueryModel类,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序 常用函数 QVariant headerDa ...

  9. 解决bootstrap和jquey中的.button扩展冲突的问题。

     

  10. [React GraphQL] Pass Parameters to urql's useQuery React Hook

    Showing how to use 'uqrl' library to do GraphQL in React. import React, {useState} from 'react' impo ...