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

sql转储太慢

发布时间: 2023-05-14 02:42:52

sql 2005存储过程莫名慢

你在查询分析器里,先打开“执行计划”,然后执行存储过程,跟踪看慢在哪里吧

㈡ SQL 语句执行感觉很慢,怎么回事

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

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

㈢ 如何解决SQL查询速度太慢

1. 执行计划中明明有使用到索引,为什么执行还是这么慢?

2. 执行计划中显示扫描行数为 644,为什么 slow log 中显示 100 多万行?
a. 我们先看执行计划,选择的索引 “INDX_BIOM_ELOCK_TASK3(TASK_ID)”。结合 sql 来看,因为有 "ORDER BY TASK_ID DESC" 子句,排序通常很慢,如果使用了文件排序性能会更差,优化器选择这个索引避免了排序。
那为什么不选 possible_keys:INDX_BIOM_ELOCK_TASK 呢?原因也很简单,TASK_DATE 字段区分度太低了,走这个索引需要扫描的行数很大,而且还要进行额外的排序,优化器综合判断代价更大,所以就不选这个索引了。不过如果我们强制选择这个索引(用 force index 语法),会看到 SQL 执行速度更快少于 10s,那是因为优化器基于代价的原则并不等价于执行速度的快慢;
b. 再看执行计划中的 type:index,"index" 代表 “全索引扫描”,其实和全表扫描差不多,只是扫描的时候是按照索引次序进行而不是行,主要优点就是避免了排序,但是开销仍然非常大。
Extra:Using where 也意味着扫描完索引后还需要回表进行筛选。一般来说,得保证 type 至少达到 range 级别,最好能达到 ref。
在第 2 点中提到的“慢日志记录Rows_examined: 1161559,看起来是全表扫描”,这里更正为“全索引扫描”,扫描行数确实等于表的行数;
c. 关于执行计划中:“rows:644”,其实这个只是估算值,并不准确,我们分析慢 SQL 时判断准确的扫描行数应该以 slow log 中的 Rows_examined 为准。
4. 优化建议:添加组合索引 IDX_REL_DEVID_TASK_ID(REL_DEVID,TASK_ID)

优化过程:
TASK_DATE 字段存在索引,但是选择度很低,优化器不会走这个索引,建议后续可以删除这个索引:
select count(*),count(distinct TASK_DATE) from T_BIOMA_ELOCK_TASK;+------------+---------------------------+| count(*) | count(distinct TASK_DATE) |+------------+---------------------------+| 1161559 | 223 |+------------+---------------------------+

在这个 sql 中 REL_DEVID 字段从命名上看选择度较高,通过下面 sql 来检验确实如此:
select count(*),count(distinct REL_DEVID) from T_BIOMA_ELOCK_TASK;+----------+---------------------------+| count(*) | count(distinct REL_DEVID) |+----------+---------------------------+| 1161559 | 62235 |+----------+---------------------------+

由于有排序,所以得把 task_id 也加入到新建的索引中,REL_DEVID,task_id 组合选择度 100%:
select count(*),count(distinct REL_DEVID,task_id) from T_BIOMA_ELOCK_TASK;+----------+-----------------------------------+| count(*) | count(distinct REL_DEVID,task_id) |+----------+-----------------------------------+| 1161559 | 1161559 |+----------+-----------------------------------+

在测试环境添加 REL_DEVID,TASK_ID 组合索引,测试 sql 性能:alter table T_BIOMA_ELOCK_TASK add index idx_REL_DEVID_TASK_ID(REL_DEVID,TASK_ID);
添加索引后执行计划:
这里还要注意一点“隐式转换”:REL_DEVID 字段数据类型为 varchar,需要在 sql 中加引号:AND T.REL_DEVID = 000000025xxx >> AND T.REL_DEVID = '000000025xxx'

执行时间从 10s+ 降到 毫秒级别:
1 row in set (0.00 sec)
结论
一个典型的 order by 查询的优化,添加更合适的索引可以避免性能问题:执行计划使用索引并不意味着就能执行快。

㈣ SQL server2000数据存储多了之后存储速度变慢是什么原因

数据量大的话,不妨新建一个新的数据库...将许久不用的资料转移到新数据库中.保持常用和常谨卖拆查询的数据库的笔数和大小..维持在一个让人满意的程度.不配颤然慢是早晚的事.另外判断一下,是否是查询慢存储一般会觉得是直接塞一笔..而平常使用,查询可能会先于存储执行..因为有些判断什么的.
如果实祥枣际上是查询慢的话..可以按查询的关键字建立索引..不过.如果数据量本身就超大..建立索引会需要比较长的时间.

㈤ sql数据库文件过大,程序运行非常慢,怎么办

收缩数据库

一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据

㈥ 大神们帮忙看看这个SQL语句执行有点慢,要怎么优化才变快点

你好,根据SQL,我给予一些建议,最好根据执行计划:

  1. 若走的全表扫描,建议建立表间关联字段索引,查看索引失效原因,修改SQL关联逻辑,大部分都能解决。

  2. 如果是数据量大的问题:

    a. 如果有多个查询条件,建议建立where限制条件,减少数据统计范围。

    b. 如果实时性要求不高,可以定时跑批,把结果放在结果表里,前台查询结果表。

    c. 关联表太多,SQL建议拆分两端,sum统计单独放一个SQL。

㈦ 求解navicat for mysql 对1个G的sql文件导入超级慢怎么处理在线等!急急急!求指点

在my.ini最底下添加个KV对:

max_allowed_packet=100000M
然后重启Mysql,就可以按普通的方法导了,可以用mysql命令,也可以用navicat for mysql(我一般用这个)
不知道能不能写成100G,没试过,LZ试下吧。

如果改不了my.ini可以试试这个方法,我没试过,因为我一直是改my.ini的,相信你有这么大的数据库应该不是用的虚拟主机吧:
set global max_allowed_packet = 100*1024*1024*1024;
然后用:
show VARIABLES like '%max_allowed_packet%';
查看一下是否修改成功,这个应该就不用重启mysql了,重启反而失效了。

㈧ 如何解决SQL查询速度太慢

解决方法如下:

1、把数据、日志、索引放到不同的设备上,增加读取速度;

2、纵向、横向分割表,减少表的尺寸;

3、升级硬件;

4、困烂根据查询条件,建立索引,优化索引、优化闷厅访问方式,限制结果集的数据量,注意填充因子要适当,索引应该尽量小,使用字节数小的列建索引蚂尺隐好,不要对有限的几个值的字段建单一索引如性别字段;

4、提高网速。

㈨ 为什么我的mysql导入sql文件很慢,3000多条的insert语句都要5分钟,我朋友电脑却不超

硬盘读写速度会影响输入库的写入速度的,另外看看你的mysql是不是加了好多索引,或者是不是远端数据库。。。硬盘,cpu,内存,网络和mysql配置都会对执行速度产生影响的