mysql数据库优化及sql调优,mysql的查询优化

  mysql数据库优化及sql调优,mysql的查询优化

  http://blog..net/daybreak1209/article/details/51638187

  1.mysql查询类型(默认情况下查询所有数据列)

  1.内部连接

  默认多表关联查询方式,查询两个表中的所有字段;您可以省略inner join关键字。

  2.通过外部连接可以找到某个表中的所有数据。

  (1)左侧连接

  查询第一个表中的所有字段。

  (2)正确连接

  查询第二个表中的所有字段,如果第一个表中的匹配数据为null,则返回null。

  3.子连接

  -通过内部联接找到bookID=book type ID的记录。

  SELECT tb.bookName,tby.bookTypeName FROM t_book tb,t_bookType tby其中TB . book typeid=tby . id;

  -外部连接(左侧连接)

  SELECT tb.bookName,tby . book typename FROM t _ book LEFT JOIN t _ book上的t _ book type . book typeid=t _ book type . id其中.

  -外部连接(右侧连接)

  SELECT tb.bookName,tby . book typename FROM t _ book RIGHT JOIN t _ book上的t _ book type . book typeid=t _ book type . id其中.

  -子查询

  SELECT * FROM t _ book WHERE book typeid IN(SELECT id FROM t _ book type);

  SELECT * FROM t _ book WHERE book type id NOT IN(SELECT id FROM t _ book type);

  SELECT * FROM t _ book WHERE price=(SELECT price FROM t _ price level WHERE price level=1);

  SELECT * FROM t _ book WHERE EXISTS(SELECT * FROM t _ book type);

  SELECT * FROM t _ book WHERE NOT exist(SELECT * FROM t _ book type);

  SELECT * FROM t _ book WHERE price=ANY(SELECT price FROM t _ price level);

  SELECT * FROM t _ book WHERE price=ALL(SELECT price FROM t _ price level);

  二、查询优化思路

  1.为什么慢?

  在尝试优化查询之前,您必须了解是什么使查询变慢。如果把查询看成一个由n个子任务组成的任务,随着子任务的增加,sql关联查询也会增加;优化,其实就是对这n个子任务进行优化,要么去掉一些子任务,要么减少子任务的数量。

  2.子任务是什么?

  mysql执行一个查询一般有几个过程:客户端向服务器发送查询语句——,服务器解析查询语句3354生成执行计划3354执行查询;执行是整个生命周期中最重要的阶段,包括调用、排序、分组数据库引擎的数据处理过程。

  三、优化方向

  1.优化查询数据

  查询效率低的基本原因是:访问的数据太多,必然需要大量的筛选工作;

  错误:select * from t _ user内部联接t _ role r内部联接t _ permission p其中.

  错误:使用内部联接找到了三个表中的所有数据列。

  正确做法:从t _ user inn join t _ role r inner join t _ permission p中选择t.name,r.rolename,p.pname其中

  2.拆分查询

  分而治之,把复杂的查询切割成小查询,每个查询只返回一小部分结果。

  错误:select * from t _ user t where to create data date _ sub(now(),interval 3month)

  delete from t _ user t where created data DATE _ SUB(NOW(),间隔3个月)

  错误:当用户表数据量巨大时,一次性查询或删除表中大量数据会导致等待暂停;

  正确做法:select * from t _ user t where创建数据date _ sub (now(),interval 3month)限制0,1000;

  首先查询表中前1000条符合条件的数据;

  3.分解关联的查询

  错误:select t.name,r.rolename,p . pname from t _ user inn join t _ role r inner join t _ permission p where。

  错误:当用户表数据量巨大时,一次性查询或删除表中大量数据会导致等待暂停;

  正确做法:select * from t_user其中t.age=10

  从t_user中选择t. rolename,其中.

  select t. pname from t_user其中.

  分解查询表面上看起来是一条sql完成的,现在却要三条sql完成。事实上,它比关联查询有更多的优点:

  (1)提高缓存效率:对于第二条查询语句,第一条查询中记录age=10的所有字段都已经缓存在mysql中。

  (2)减少单个查询之间的锁竞争。

  (3)减少冗余字段的查询。

  四。摘要

  在平时的应用中,尤其是在java开发中,提供了很好的数据持久化框架,和mysql的查询优化没有过多的关联。另外,在使用sql执行查询时,可能会经常用到多表关联查询。在使用这些sql拼接的过程中,一定要了解一下sql优化。在处理高并发的问题上,除了web服务器前端加载、并行扩展等措施外,数据库高并发的解决方案也同样重要,而且这一条一条sql。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些
  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些,关系型数据库与非关系型数据库简介
  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 什么是分库分表,为什么要进行分库分表-,分库分表的区别,数据库分库分表是什么,什么情况下需要用分库分表
  • vb中adodb连接数据库,
  • treeview控件绑定数据,wpf treeview数据绑定,详解TreeView绑定数据库
  • sql的多表查询,数据库如何实现多表查询
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库,SQLServer2019 数据库的基本使用之图形化界面操作的实现
  • sql数据库定时备份怎么弄,mysql 定期备份
  • sql数据库定时备份怎么弄,mysql 定期备份,MySQL 数据库定时备份的几种方式(全面)
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar,SQL中varchar和nvarchar的基本介绍及其区别
  • 留言与评论(共有 条评论)
       
    验证码: