Mysql 刷题总结day1

1.倒序

查询出第一条数据

select * from [] order by [字段] desc limit 0 ,1;

1.order by 通过什么排序
2.desc 表示倒叙
3. limit 0 ,1 表示下标为0开始,查询出一条数据。

2.内连接与左连接

查询出两张表相同的部分,不能存在null
内连接:

select last_name , first_name,dept_no  from dept_emp inner join employees 
on employees.emp_no = dept_emp.emp_no;

左连接:

select last_name , first_name,dept_no  from dept_emp left join employees 
on employees.emp_no = dept_emp.emp_no;

语法分析:
1.inner joinleft join 都是将两张表联合在一起,然后进行查询。on表示以什么条件进行联合在一起。
2.inner join是查的交集,就是表公共部分。
3. left join是以左边的表为主表进行查询。会查询出左表的所有内容,右表不存在的以null填。

效率分析:
1.左连接的时候以左表为原则,根据左表查询, 并且会进行回表操作,当左表数据量比较大,就需要更多的时间,展示左表中的元素,其他的表字段为空一样展示
2.左连接在mysql內部比内连接多一步,左连接可能会转化为内连接,但是主要还是看sql语句的效率。

3.如何进行效率分析?

1.EXPLAIN 关键字
1.用法 EXPLAIN + sql语句
2.输出:

id select_typetabletypepossible_keyskeykey_lenrefrowsrowsExtra
##########

3.输出分析:

  • id:这是SELECT的查询序列号
  • select_type:select_type就是select的类型,可以有以下几种:
SIMPLE:简单SELECT(不使用UNION或子查询等)

PRIMARY:最外面的SELECT

UNIONUNION中的第二个或后面的SELECT语句

DEPENDENT UNIONUNION中的第二个或后面的SELECT语句,取决于外面的查询

UNION RESULT:UNION的结果。

SUBQUERY:子查询中的第一个SELECT

DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询

DERIVED:导出表的SELECT(FROM子句的子查询)
  • table:显示这一行的数据是关于哪张表的。
  • type:这列最重要,显示了连接使用了哪种类别,有无使用索引,是使用Explain命令分析性能瓶颈的关键项之一。
  • possible_keys:指出了MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。
  • key:显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。
  • key_len:显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好。
  • ref:显示使用哪个列或常数与key一起从表中选择行。
  • rows:显示MySQL认为它执行查询时必须检查的行数。
  • wxtra:包含MySQL解决查询的详细信息,也是关键参考项之一,显示了查询中MySQL的附加信息,关注 Using filesort 和 Using temporary。

wxtra内容详解:

Distinct
一旦MYSQL找到了与行相联合匹配的行,就不再搜索了

Not exists
MYSQL 优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,
就不再搜索了

Range checked for each

Record(index map:#)
没有找到理想的索引,因此对于从前面表中来的每一 个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一

Using filesort
看 到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。
它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来 排序全部行

Using index
列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表 的全部的请求列都是同一个索引的部分的时候

Using temporary
看到这个的时候,查询需要优化了。这 里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BYUsing where
使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,
并且连接类型ALLindex, 这就会发生,或者是查询有问题

2.show profiles 语句
查看sql执行的时间
1.开启 set profiling=1,默认是关的
2.使用 show profiles ,显示上次查询sql的每条结果所花时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值