高手来翻译一篇论文 谢谢!

高手来翻译一篇论文 谢谢!,第1张

摘要:本研究的目的是整合的夜功河径流研究水力模型和地理信息系统(GIS),并建立洪水风险图的水文和液压的方法。该过程涉及径流频率设计径流频率分析,并发展与DTM的生成数字地形模型(DTM)与工程中心的长江水文分析系统集成(港灯- RAS)的制定平原洪水的区域模式的决心,和地理信息系统设计洪水重现期为一个模拟的预防,预警和预测模型。

从1996年的洪水仿真模型的结果是正确地介绍地理信息系统和数字地面模型。推导出的DTM使用等高线,河流点的高度,沿江现场高度数据。模型的准确度为60%后,1996年洪水比较面积皇家灌溉部解释,为基础,洪水模拟的模型。应当进一步研究做了较大的盆地,如夜功盆地为分deviding流域。该网络连接的方法结合起来subbasins应采用有一个盆地概述。在冲积平原,河道,人为的结构和地理信息系统数据库,径流量是重要的因素的研究径流量的行为和预测洪水区。进一步研究,建议将包括粗糙度值,微妙的地理信息系统数据,遥感数据和数据库管理。

问题补充:引言洪水是一种自然现象,到处发生

索引只是优化的一种方式

查询的效率受限于网络、服务主机的资源情况以及数据库的存储结构以及索引等综合情况来说的,并不是说建了索引就一定很快

建议你综合的看一下哪条SQL语句查询慢,解释一下,看看瓶颈在哪里,去学习一些数据库的优化知识以及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 TREL_DEVID = 000000025xxx >> AND TREL_DEVID = '000000025xxx'

执行时间从 10s+ 降到 毫秒级别:

1 row in set (000 sec)

结论

一个典型的 order by 查询的优化,添加更合适的索引可以避免性能问题:执行计划使用索引并不意味着就能执行快。

以上就是关于高手来翻译一篇论文 谢谢!全部的内容,包括:高手来翻译一篇论文 谢谢!、mysql 查询的时候加了索引 查询还是很慢怎么办、如何解决SQL查询速度太慢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10085311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存