高性能mysql 小查询_高性能MySql进化论(十一):常见查询语句的优化

总结一下常见查询语句的优化方式

1        COUNT

1.       COUNT的作用

·        COUNT(table.filed)统计的该字段非空值的记录行数

·        COUNT(*)或者是COUNT(not nullable field) 统计的是全表的行数

如果要是统计全表记录数,COUNT(*)效率会比COUNT(not nullable field)要高一点

2.       MYISAM的COUNT

一般执行COUNT操作时需要扫描大量的记录,但是在MyISAM引擎的数据库中,数据库把表的记录数保存起来,所以COUN(*)会非常的快(前提是不包含where条件)

3.       当需要频繁的使用COUNT时,可以考虑使用汇总表的策略

4.       优化小例子

在MYISAM中进行范围查询时,可以减少检索行数的小技巧

原始的:select count(*) from dictionary where id>5.

优化后:select (select count(*) fromdictionary)-count(*) from dictionary where id<=5

减少查询次数

优化前:需要两条语句

Select count(*)from student where area=’SH’

Select count(*)from student where area=’BJ’

优化后:合并成一条

select count(area='SH') as shcount, count(area='BJ') as bjcount from student;

2        优化关联查询

1.       确保ON或USING的字句上有索引

2.       一般情况下只需要在第二个表上创建索引

3.       尽量使 Group by/Order by的表达式中只包含一个表的字段

3        优化子查询

尽量用关联代替子查询

4        优化Group by 以及Distinct

1.       当对关联查询执行group by操作时,使用查询表的标识列作为分组条件效率会比较高

2.       当需要查询的非group by指定的字段时,正常情况下是无法执行的,可以通过inner join 的形式来弥补

select firstname, lastname

from actor

inner join(select actor_id, count(*) as cnt from actor group by(actor_id))

using (actor_id)

3.       group by默认会对查询的结果进行排序,数据量很大的时候可能会比较耗资源,如果你不关心查询结果的顺序,可以通过order by null 避免这种不必要的浪费

5        LIMIT分页

在进行分页查询的时候往往是采用select * from table1 limit 100,20 的方式来提取数据,在处理的过程中会读取120条数据,然后扔掉100条的offset记录,最后返回20条记录给客户端。如果offset的值非常大,效率上可能会有影响,可以尝试

1.       可以通过覆盖索引+inner join的方式来重写sql

select field1,field2,field3

from table1

inner join

(select id from table1 limit 100, 20) as temp

using(id)

2.       如果可以计算出明确的开始点和结束点,可以转换成 between and 的方式,这种方式只会扫描指定的行数,效率比较高

Select * from table1 between 100 and 120.

3.       可以通过位置标签的方式,来减少需要检索的记录数

例如 从某个位置开始。 Select * from table1 whereid>100 limit 20

下图列出了三种方式的效率对比

ef453530618a5b876c48e7b3cc061406.png

在进行分页处理的时候往往需要知道记录的总数,然后用这些总数生成页码。获取总数往往是使用count或是伴随一次全表查询得到的,这个过程也是检索所有的记录,然后再丢掉。为了避免这种浪费可以采取两种策略

·        把页码换成“下一页”的方式,这样就只需要去取固定的条数

·        一次性读取1000条,当一千条使用完后,采用“获取更多记录”的方式再获取1000条

6        UNION

·        Union操作会对处理后的结果执行distinct操作,这在很多时候是没有必要的。可以采用union all来避免这个问题

7        自定义变量

合理灵活的使用自定义变量往往会给程序的性能带来意想不到的效果,但往往也会带来与其他数据库系统的兼容性问题。

下面列出几个自定义变量使用的小例子

·        行号

mysql> set @rownumber:=0;

mysql> select mean, @rownumber:=@rownumber+1 from dictionary limit10;

·        避免重复查询刚刚更新的数据

在更新完一条记录后,往往需要再次执行select查询刚刚更新过的记录

通过变量可以避免这种问题

Mysql>set @updaterow:=null;

mysql> update dictionary set mean='update get variable' where id=100and @updaterow:=now();

·        统计更新和插入的数量

mysql> set @x:=0;    //define avariable

mysql> insert into dictionary (id,mean) values(3,'duplicate') onduplicate key update mean=values(mean)+(0*(@x:=@x+1)); //insert a duplicaterecord

mysql> select @x; //get x value, it’s indicator duplicate times

8        静态分析工具

有时候可以借助专门的查询分析工具来发现自己的问题,比如pt-query-advisor(http://www.percona.com/doc/percona-toolkit/2.1/pt-query-advisor.html)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

首席架构师徐海峰眼中的架构和出色的架构师

CSDN架构领域编辑采访了一些与会讲师&#xff0c;谈谈他们将在会上分享的内容、相关技术和程序人生&#xff0c;带你领略讲师风采。 本期我们采访的讲师是来自阅文集团首席架构师徐海峰&#xff0c;主要负责内容中心的网站架构和分布式存储、分布式计算工作。10年互联网开发经验…

hadoop-eclipse-plugin使用

下载hadoop安装包&#xff1a;http://www.carfab.com/apachesoftware/hadoop/common/hadoop-1.0.2/ 但是没有plugin&#xff0c;我到这个地方下载的&#xff1a;http://ishare.iask.sina.com.cn/f/23642243.html?fromlikecopy到你的eclipse_home的plugins下面。配置map/reduce…

java 记事本界面_JAVA/GUI程序之记事本

自上半年JAVA课程结束后&#xff0c;再也没有看过JAVA了&#xff0c;最近不是很忙&#xff0c;又简单的看了看&#xff0c;本博客纯属记录学习过程&#xff0c;请大神们别笑&#xff0c;其中错误是难免的&#xff0c;毕竟是新手写的博客。下面就进入我们的正题吧&#xff0c;复…

mapper-reducer word count 实例

统计一个文件里各单词的个数&#xff0c;假设这个文件很大。 原理如下图&#xff1a; 编写代码&#xff1a; WCMapper.java package zengmg.hadoop.mr.wordcount;import java.io.IOException;import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …

MR程序的几种提交运行模式

MR程序的几种提交运行模式 本地模型运行 1/在windows的eclipse里面直接运行main方法&#xff0c;就会将job提交给本地执行器localjobrunner执行 ----配置path&#xff1a;D:\hadoop-2.7.2\bin ----配置hadoop_home&#xff1a;D:\hadoop-2.7.2 ----复制 hadoop.dll和winutil…

零点起飞学java视频_零点起飞学java (刘升华) 高清PDF_IT教程网

资源名称&#xff1a;零点起飞学java (刘升华) 高清PDF第1篇 java开发基础第1章 java概述( 教学视频&#xff1a;37分钟) 2第2章 基本数据类型及运算( 教学视频&#xff1a;52分钟) 14第3章 java程序流程控制( 教学视频&#xff1a;33分钟) 36第4章 类与对…

vector 修改 java_java对vector动态数组中的对象排序,以下代码有何问题,如何修改?...

展开全部package com.tx.collection;import java.util.Comparator;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;import java.util.TreeSet;import java.util.Vector;public class Student {String name;int score;public S…

hadoop的序列化与java的序列化区别

java的序列化机制 java序列化时会把具体类的数据和类的继承结构信息都序列化传递。如下图hadoop的序列化机制 序列化类的数据&#xff0c;但是不序列化类的继承结构信息。 网络传递的时候就少了很多流量&#xff0c;hadoop也不需要类的继承关系&#xff0c;只要类的数据就够…

ORA-08103: object no longer exists

今天工具箱报错&#xff1a; ORA-08103: object no longer exists 查了原因&#xff0c;是有session在操作表&#xff0c;比如插入&#xff0c;更新等。而工具箱这个操作刚好在select表&#xff0c;所以报错。-------下文是英文解释----- ORA-08103: object no longer exists错…

DAY3-“忙里偷闲”找你玩耍2018-1-11

接触Java第三天&#xff0c;嘿嘿&#xff0c;今天近代史期末考试&#xff0c;提前一小时交卷&#xff0c;回宿舍继续学习&#xff0c;中午去见女神姐姐了&#xff0c;每次见完女神姐姐都是满满地动力。这次女神姐姐告诉我们要好好规划自己的时间&#xff0c;早上花20分钟规划好…

基于ssm出租车管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本出租车管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

Spring Security源码分析四:Spring Social实现微信社交登录

2019独角兽企业重金招聘Python工程师标准>>> 社交登录又称作社会化登录&#xff08;Social Login&#xff09;&#xff0c;是指网站的用户可以使用腾讯QQ、人人网、开心网、新浪微博、搜狐微博、腾讯微博、淘宝、豆瓣、MSN、Google等社会化媒体账号登录该网站。 前言…

求方程的解 Solve the Equation

为什么80%的码农都做不了架构师&#xff1f;>>> 问题&#xff1a; Solve a given equation and return the value of x in the form of string "x#value". The equation contains only , - operation, the variable x and its coefficient. If there is …

java流读取字符串_javaIO之字符流是怎么读取的?

最近在看io相关的知识&#xff0c;遇到一些小问题&#xff0c;以下有例子来说明问题&#xff1a;比如&#xff1a;12345 是一个十进制数根据ASCII码找到是 &#xff1a;二进制 00110001 00110010 00110011 00110100 00110101十进制4950515253十六进制 0x310x320x330x340x35文件…

js学习

为什么80%的码农都做不了架构师&#xff1f;>>> /* my code */ var gArrSpell [ 1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 999999, AAAA, bbbb, cccc, dddd, eeee, fffff ];var gArrSplDmg [11,12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24…

代码在eclipse下不报错,在doc命令行下报错--jar file和runable jar file

今天开发一个小工具&#xff0c;引用了Log4j&#xff0c;来记录日志&#xff0c;在eclipse下运行&#xff0c;代码正常&#xff0c;打包成jar放到doc命令行下运行报错&#xff1a; Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/…

小马激活软件下载,当心伪小马,有病毒

官方的小马激活软件已经停止更新了&#xff0c;下文是官方停更公告。 http://www.pccppc.com/xiaomajihuo-html 所以小马oem7以后的都不是官方的&#xff0c;包含病毒。重装系统后&#xff0c;一般是先激活系统&#xff0c;再安装杀毒软件&#xff0c;这就给“伪小马激活工具”…

三张图搞懂JavaScript的原型对象与原型链

对于新人来说&#xff0c;JavaScript的原型是一个很让人头疼的事情&#xff0c;一来prototype容易与__proto__混淆&#xff0c;二来它们之间的各种指向实在有些复杂&#xff0c;其实市面上已经有非常多的文章在尝试说清楚&#xff0c;有一张所谓很经典的图&#xff0c;上面画了…

Mybatis中resultMap

MyBatis中在查询进行select映射的时候&#xff0c;返回类型可以用resultType&#xff0c;也可以用resultMap&#xff0c;resultType是直接 表示返回类型的&#xff0c;而resultMap则是对外部ResultMap的引用&#xff0c;但是resultType跟resultMap不能同时存在。 1.resultType …

Erlang/OTP设计原则(文档翻译)

http://erlang.org/doc/design_principles/des_princ.html 图和代码皆源自以上链接中Erlang官方文档&#xff0c;翻译时的版本为20.1。 这个设计原则&#xff0c;其实是说用户在设计系统的时候应遵循的标准和规范。阅读前我一直以为写的是作者在设计 Erlang/OTP 框架时的一些原…