博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
表连接与子查询的区别
阅读量:5234 次
发布时间:2019-06-14

本文共 1767 字,大约阅读时间需要 5 分钟。

1.表关联是可以利用两个表的索引的,如果是用子查询,至少第二次查询是没有办法使用索引的。

2.在where子句中指定连接条件

3.SQL中优化中有一条:

将子查询转换为连接查询。

原因:子查询会多次运算查询,连接查询利于优化器优化,而且可以使用多线程查询各个连接子句。

4.四、 子查询

    在某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要用到子查询
    为了给主查询提供数据而首先执行的查询被叫做子查询
    用于子查询的关键字主要包括in、not in、=、<>等

 

4.1 查询工资比ALLEN搞的员工

 
  1. SELECT *  
  2. FROM emp  
  3. WHERE sal>(  
  4. SELECT sal FROM emp WHERE ename='ALLEN'  

5.sql语句里,如果使用了mysql的函数,索引就无效了?是的

 

 上面两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而 开启缓存。

6.EXPLAIN 你的 SELECT 查询

使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。

EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序的……等等,等等。

3. 当只要一行数据时使用 LIMIT 1

当你查询表的有些时候,你已经知道结果只会有一条结果,但因为你可能需要去fetch游标,或是你也许会去检查返回的记录数。

在这种情况下,加上 LIMIT 1 可以增加性能。这样一样,MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。

下面的示例,只是为了找一下是否有“中国”的用户,很明显,后面的会比前面的更有效率。(请注意,第一条中是Select *,第二条是Select 1)

10.

MySQL何时使用索引

   对一个键码使用>, >=, =, <, <=, IF NULL和BETWEEN

  
  SELECT * FROM table_name WHERE key_part1=1 and key_part2 > 5;
  
  SELECT * FROM table_name WHERE key_part1 IS NULL;
  当使用不以通配符开始的LIKE
  
  SELECT * FROM table_name WHERE key_part1 LIKE 'jani%'
  在进行联结时从另一个表中提取行时
  
  SELECT * from t1,t2 where t1.col=t2.key_part
  找出指定索引的MAX()或MIN()值
  
  SELECT MIN(key_part2),MAX(key_part2) FROM table_name where key_part1=10
  一个键码的前缀使用ORDER BY或GROUP BY
  
  SELECT * FROM foo ORDER BY key_part1,key_part2,key_part3
  在所有用在查询中的列是键码的一部分时间
  
  SELECT key_part3 FROM table_name WHERE key_part1=1

 

11.

如果子句的查询条件里使用了函数( DAY(column) = …),MySQL也将无法使用索引。

 

4.2 查询和ALLEN同一个部门的员工

  1. SELECT *  
  2. FROM emp  
  3. WHERE deptno=(  
  4. SELECT deptno FROM emp WHERE ename='ALLEN'  
  5. )  

4.3 查询月薪最高的员工的名字

    1. SELECT ename,sal  
    2. FROM emp  
    3. WHERE sal=(  
    4. SELECT MAX(sal)  
    5. FROM emp  
    6. )  

转载于:https://www.cnblogs.com/panxuejun/p/5886431.html

你可能感兴趣的文章
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
SpringAop与AspectJ
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>