当前位置:首页 » 编程语言 » Sql多久才算慢
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

Sql多久才算慢

发布时间: 2023-06-19 10:10:58

‘壹’ 美团面试题:慢sql有遇到过吗是怎么解决的

大家好,我是田维常,可以叫我老田,也可以叫我田哥

。2017年的时候,我刚去上海,朋友内悄指早推我去美团面试,之前我也写过一个一篇文章,也是在美团面试中遇到的:

美团面试题:String s = new String("111")会创建几个对象?

关于慢SQL,我和面试官扯了很久,面试官也是很谦虚的,总是点头,自己以为回答的还可以。最后的最后,还是说了“ 你先回去等通知吧! ”。

所以,我决定把这个慢SQL技术点,好好和你分享分享。希望你下次在遇到类似的面试,能顺顺利利轻轻松松的斩获自己想要的offer。

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录MySQL中查询时间超过(大于)设置阈值(long_query_time)的语句,记录到慢查询日志中。

其中,long_query_time的默认值是10,单位是秒,也就是说默认情况下,你的SQL查询时间超过10秒就算慢SQL了。

在MySQL中,慢SQL日志默认是未开启的,也就说就算出现了慢SQL,也不会告诉你的,如果需要知道哪些SQL是慢SQL,需要我们手动开启慢SQL日志的。

关于慢SQL是否开启,我们可以通过下面这个命令来查看:

在这里插入图片描述

通过命令,我们就可以看到slow_query_log项为OFF,说明我们的慢SQL日志并未开启。另外我们也可以看到我们慢SQL日志存放于哪个目录下和日志文件名。

下面我们来开启慢SQL日志,执行下面的命令:

这里需要注意,这里开启的是我们当前的数据库,并且,我们重启数据库后会失效的。

开启慢SQL日志后,再次查看:


slow_query_log项已经变成ON,说明开启成功。

上面说过慢SQL默认时间是10秒,我们通过下面的命令就可以看到我们慢SQL的默认时间:

在这里插入图片描述

我们总不能一直使用这个默认值,可能很多业务需要时间更短或更长,所以此时,我们就需要对默认时间进行修改,修改命令如下:

修改完了,我们再来看看是否已经改成了3秒。


这里需要注意:想要永久的生效,还需要修改MySQL下面的配置文件my.cnf 文件。

注意:不同操作系统,配置有些区别。

Linux操作系统中

Windows操作系统中

执行一条慢SQL,因为我们前面已经设置好了慢SQL时间为3秒,所以,我们只要执行一条SQL时间超过3秒即可。


该SQL耗时4.024秒,下面我们就来查看慢SQL出现了多少条。

使用命令:


找到慢SQL日志文件,打开后就会出现类似下面这样的语句;

简单说明:

切记

通常我们定位慢SQL有两种方式:

第一种:定位慢查询 SQL 可以通过两个表象进行判断

第二种:根据不同的数据库使用不同的方式获取问题 SQL

如果开启了慢SQL日志后,可能会有大量的慢SQL日志产生,此时再用肉眼看,那是不太现实的,所以大佬们就给我搞了个工具: mysqlmpslow 。

mysqlmpslow 能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等。

通过命令

可以看到相关参数的说明:

比较常用的参数有这么几个:

mysqlmpslow 常用的使用逗庆方式如下:

如上一条命令,应该是mysqlmpslow最简单的一种形式,其中-s参数是以什么方式排序的意思,c指代的是以总数从大到小的方式排序。-s的常用子参数有:c: 相同查询以查询条数和从大到小排序。t: 以查询总时间的方式从大到小排序。l: 以查询锁的总时间的方式从大到小排序。at: 以查询平均时间的方式从大到小排序。al: 以查询锁平均时间的方式从大到启雀小排序。

同样的,还可以增加其他参数,实际使用的时候,按照自己的情况来。

其他常用方式:

接下,我们来个实际操作。

这其中的 SQL 语句因为涉及某些信息,所以我都用*号将主体替换了,如果希望得到具体的值,使用-a参数。

使用 mysqlmpslow 查询出来的摘要信息,包含了这些内容:

Count : 464 :表示慢查询日志总共记录到这条sql语句执行的次数;

Time=18.35s (8515s) :18.35s表示平均执行时间(-s at),8515s表示总的执行时间(-s t);

Lock=0.01s (3s) :与上面的Time相同,第一个表示平均锁定时间(-s al),括号内的表示总的锁定时间(-s l)(也有另一种说法,说是表示的等待锁释放的时间);

Rows=90884.0 (42170176) : 第一个值表示扫描的平均行数(-s ar),括号内的值表示扫描的总行数(-s r)。

是不是

so easy!!!!

‘贰’ 零基础学sql要多久

零基础学sql大约需要3-5个月的时间。

SQL全称是 Structured Query Language,翻译后就是结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。那么什么是数据库呢?简而言之就是存储数据的仓库,Excel为什么不算数据库呢,因其能够存储的数据量真的太小了,Excel2016最多存储104万条数据。现在大数据时代数据动辄百万、千万,所以需要数据库来帮忙。SQL的能力分为入门,实战两个阶段,具体看面试的岗位要求的水平。一般SQL分为增,删,改,查四大能力。很多人都以为按这个顺序应该先写增,删,改,但其实往往工作中真正用到的是查。SQL很通用,随便找一本教程都会讲这东西,网上也很多,根本不用挑选。学习的重点要放在理解结构化数据的概念和运算,而不是SQL的语法。理解那些基础知识后,语法本身就不是个事。

想了解更多sql相关详情,推荐咨询达内教育。达内教育具有丰厚的师资力量,优秀的教学体系,教学质量突出。理论知识+学习思维+实战操作,打造完整学习闭环。实战讲师,经验丰富。达内教育独创TTS8.0教学系统,并设有企业双选会。达内的OMO教学模式,全新升级,线上线下交互学习,直播学,随时学,随时问,反复学,学习安排更便捷。【想要了解更多信息,欢迎点击咨询达内教育!】

‘叁’ SQL 语句执行感觉很慢,怎么回事

到这个数量级的全部更新,肯定会很慢。
第一。你的记录不一定在同一个partition,
第二。不明白为什么那么多人建议你建索引,你建的索引越多,你的更新速度越慢,因为你更新记录的同时,还有更新索引。
第三。你必须知道更新速度慢的瓶颈在哪里。是读写太多,还是内存不够,还是CUP不够快,然后对症下药。

下面介绍两个简单的办法,也许有效:
第一:
把这个100W行的表纵向劈成两个,用外键关系连接,一个装小的,经常改变的数据比如ID,外键,状态值,时间等,另一个装大的,不经常改变的数据,比如很长的字符串,xml,text 等。
这样更新时操作小的这个表,可以大大节约内存和CPU 开销,降低磁盘操作。
坏处就是查询时会慢些。
第二:
把这100W行横向切成很多个表,比如每个月的记录装在一个表里,这样每个表的记录数可能只有几万,查询,更新都会快很多。
坏处是查询,更新都不如原来好写。

‘肆’ sql使用时间查询非常缓慢,为什么

你用什么类型数据库?orcl还是sqlserver?查询缓慢也有很多原因,不仅是你的查询语句问题,有时候和你硬件也有关系。select XXXX from dbo.tab_name where Test_Time between '2015-03-23 11:34:27' and '2015-03-26 11:34:27' 时间是字符串,是没有问题的,不用转类型,即使你的字段是DateTime类型

‘伍’ sql运行慢

这种问题很复杂的,一般是按照先软后硬的原则 ,建议你 :
1.排除系统上是否有病毒,关掉不使用的端口,安全补丁打全!,建立查询的时候查看内存,CPU的使用情况.
2.经常查询的表是否建立索引,SQL语句查询的条件字段是否建有索引,优化SQL查询语句。
3.检查网络是否正常。
4.机器硬件是否需要升级,例如:增加一根内存或使用配置更好的机器。

‘陆’ 一般mysql超过多长时间,会被认为是慢查询

肯定影响的。

常见查询慢的原因常见的话会有如下几种:
1、没有索引或没有用到索引。
PS:索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表 的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录 即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。
索引类型:
普通索引:这是最基本的索引类型,没唯一性之类的限制。
唯一性索引:和普通索引基本相同,但所有的索引列只能出现一次,保持唯一性。
主键:主键是一种唯一索引,但必须指定为"PRIMARY KEY"。
全文索引:MYSQL从3.23.23开始支持全文索引和全文检索。在MYSQL中,全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。
2、IO吞吐量小形成了瓶颈。
PS:这是从系统层来分析MYSQL是比较耗IO的。一般数据库监控也是比较关注IO。
监控命令:$iostat -d -k 1 10
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。

‘柒’ SQL难学吗自学的话大概要多长时间

SQL如果有老师教的话一个星期就能上手,但要学好一年二年不算长,关键看你做什么应用,做数据库维护,那就要学精,要很长时间的学习与实践;如果只是存数据来开发应用程序,那把:库、表、行、列弄清楚,就可以用。自学花的时间会长点,不过不会很难。照着学没有问题。

SQL学习多久,觉得看学员基础情况。1、如果原来什么语言也没有学过,也没有基础,那最基础的要先选择一种语言来学习,是VB,C..,pascal,看个人的喜好,一般情况下,选择C语言来学习2、如果是有过语言的学习,看应该一个星期差不多,因为语言的理念互通的,只是所用的命令有所不一样。3、以前用过其它数据库管理,那应该两天就可以,主要熟悉界面和管理,其它的没什么变化。

想了解更多有关编程语言的详情,推荐选择【达内教育】。该机构具有丰厚的师资力量,优秀的教学体系,教学质量突出,实战讲师,经验丰富,理论知识+学习思维+实战操作,打造完整学习闭环。达内教育独创TTS8.0教学系统,并设有企业双选会。达内的OMO教学模式,全新升级,线上线下交互学习,直播学,随时学,随时问,反复学,学习安排更便捷。→感兴趣的话点击此处,免费学习一下

‘捌’ sql语句查询速度是1分钟慢吗

这样的时间程序是有问题了,你这条sql执行需要一分钟,前台就得等一分钟,没有用户会愿意等,现在查询时间都是毫秒级别的,如果查询时间实在减不下来,可以做缓存,或者索引