最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

sql数据库语句优化分析和优化技巧总结(sql优化工具)

来源:懂视网 责编:小采 时间:2020-11-09 08:42:03
文档

sql数据库语句优化分析和优化技巧总结(sql优化工具)

sql数据库语句优化分析和优化技巧总结(sql优化工具):通常sql数据库需要进行优化分析,并且还有一定的技巧,sql优化的几种方法这里就不做详细介绍了,本文将会sql语句优化进行总结,后面还附了优化工具SQL Tuning Expert for Oracle及使用方法,首先我们要遵随数据库优化的几个原则:1.尽量避免在列上做运算,
推荐度:
导读sql数据库语句优化分析和优化技巧总结(sql优化工具):通常sql数据库需要进行优化分析,并且还有一定的技巧,sql优化的几种方法这里就不做详细介绍了,本文将会sql语句优化进行总结,后面还附了优化工具SQL Tuning Expert for Oracle及使用方法,首先我们要遵随数据库优化的几个原则:1.尽量避免在列上做运算,
通常sql数据库需要进行优化分析,并且还有一定的技巧,sql优化的几种方法这里就不做详细介绍了,本文将会sql语句优化进行总结,后面还附了优化工具SQL Tuning Expert for Oracle及使用方法,首先我们要遵随数据库优化的几个原则:

1.尽量避免在列上做运算,这样会导致索引失败;

2.使用join是应该用小结果集驱动大结果集,同时把复杂的join查询拆分成多个query。不然join的越多表,就会导致越多的锁定和堵塞。

3.注意like模糊查询的使用,避免使用%%,例如select * from a where name like '%de%';

代替语句:select * from a where name >= 'de' and name < 'df';

4.仅列出需要查询的字段,不要使用select * from ...,节省内存;

5.使用批量插入语句,节省交互;

insert into a (id ,name)
values(2,'a'),
(3,'s');

6.limit基数比较大时,使用between ... and ...

7.不要使用rand函数随机获取记录;

8.避免使用null ,这就需要在建表时,尽量设置为not null,提升查询性能;

9,不要使用count(id),而应该是count(*)

10.不要做无谓的排序,尽可能在索引中完成排序;

我们先来看一个sql:

 select
 ii.product_id, 
 p.product_name, 
 count(distinct pim.pallet_id) count_pallet_id, 
 if(round(sum(itg.quantity),2) > -1 && round(sum(itg.quantity),2) < 0.005, 0, round(sum(itg.quantity),2)) quantity,
 round(ifnull(sum(itag.locked_quantity), 0.00000),2) locked_quantity,
 pc.container_unit_code_name,
 if(round(sum(itg.qoh),2) > -1 && round(sum(itg.qoh),2) < 0.005, 0, round(sum(itg.qoh),2)) qoh,
 round(ifnull(sum(itag.locked_qoh), 0.00000),2) locked_qoh,
 p.unit_code,
 p.unit_code_name
 from (select 
 it.inventory_item_id item_id, 
 sum(it.quantity) quantity, 
 sum(it.real_quantity) qoh 
 from 
 ws_inventory_transaction it
 where 
 it.enabled = 1 
 group by 
 it.inventory_item_id 
 ) itg 
 left join (select 
 ita.inventory_item_id item_id, 
 sum(ita.quantity) locked_quantity, 
 sum(ita.real_quantity) locked_qoh 
 from 
 ws_inventory_transaction_action ita
 where 
 1=1 and ita.type in ('locked', 'release') 
 group by 
 ita.inventory_item_id 
 )itag on itg.item_id = itag.item_id
 inner join ws_inventory_item ii on itg.item_id = ii.inventory_item_id 
 inner join ws_pallet_item_mapping pim on ii.inventory_item_id = pim.inventory_item_id 
 inner join ws_product p on ii.product_id = p.product_id and p.status = 'OK'
 left join ws_product_container pc on ii.container_id = pc.container_id
//总起来说关联太多表,设计表时可以多一些冗余字段,减少表之间的关联查询;
 where 
 ii.inventory_type = 'raw_material' and 
 ii.inventory_status = 'in_stock' and 
 ii.facility_id = '25' and 
 datediff(now(),ii.last_updated_time) < 3 //违反了第一个原则
 and p.product_type = 'goods'
 and p.product_name like '%果%' // 违反原则3

 group by 
 ii.product_id
 having 
 qoh < 0.005
 order by 
 qoh desc

上面的sql我们在from 中使用了子查询,这样对查询是非常不利的;

更好的一种做法是下面的语句:

select 
 t.facility_id,
 f.facility_name,
 t.inventory_status,
 wis.inventory_status_name,
 t.inventory_type,
 t.product_type,
 t.product_id, 
 p.product_name,
 t.container_id, 
 t.unit_quantity, 
 p.unit_code,
 p.unit_code_name,
 pc.container_unit_code_name,
 t.secret_key,
 sum(t.quantity) quantity,
 sum(t.real_quantity) real_quantity,
 sum(t.locked_quantity) locked_quantity,
 sum(t.locked_real_quantity) locked_real_quantity
 from ( select 
 ii.facility_id,
 ii.inventory_status,
 ii.inventory_type,
 ii.product_type,
 ii.product_id, 
 ii.container_id, 
 ii.unit_quantity, 
 ita.secret_key,
 ii.quantity quantity,
 ii.real_quantity real_quantity,
 sum(ita.quantity) locked_quantity,
 sum(ita.real_quantity) locked_real_quantity
 from 
 ws_inventory_item ii 
 inner join ws_inventory_transaction_action ita on ii.inventory_item_id = ita.inventory_item_id
 where 
 ii.facility_id = '{$facility_id}' and 
 ii.inventory_status = '{$inventory_status}' and 
 ii.product_type = '{$product_type}' and 
 ii.inventory_type = '{$inventory_type}' and
 ii.locked_real_quantity > 0 and 
 ita.type in ('locked', 'release') 
 group by 
 ii.product_id, ita.secret_key, ii.container_id, ita.inventory_item_id
 having 
 locked_real_quantity > 0 
 ) as t
 inner join ws_product p on t.product_id = p.product_id 
 left join ws_facility f on t.facility_id = f.facility_id
 left join ws_inventory_status wis on wis.inventory_status = t.inventory_status
 left join ws_product_container pc on pc.container_id = t.container_id 
 group by 
 t.product_id, t.secret_key, t.container_id

注意:

1、from 语句中一定不要使用子查询;

2、使用更多的where加以限制,缩小查找范围;

3、合理利用索引;

4、通过explain查看sql性能;

使用工具 SQL Tuning Expert for Oracle 优化SQL语句

对于SQL开发人员和DBA来说,根据业务需求写出一条正确的SQL很容易。但是SQL的执行性能怎么样呢?能优化一下跑得更快吗?如果不是资深
DBA,估计很多人都没有信心。

幸运的是,自动化优化工具可以帮助我们解决这个难题。这就是今天要介绍的 Tosska SQL Tuning Expert for Oracle 工具。

下载 https://tosska.com/tosska-sql-tuning-expert-tse-oracle-free-download/

本工具发明人Richard To, Dell的前首席工程师, 拥有超过20年的SQL优化经验.

1.png

1、创建数据库连接,也可以稍后创建。填好连接信息,点击 “Connect” 按钮。

如果您已经安装Oracle客户端,并且在Oracle客户端配置了TNS,可以在本窗口选择“TNS”作为”Connection Mode”,然后在”Database Alias”中选择配置好的TNS作为数据库别名。

2.png

如果您没有安装Oracle客户端或者不想安装Oracle客户端, 可以选择“Basic Type”作为”Connection Mode”,只需数据库服务器IP, 端口和服务名即可。

1.png

2、输入有性能问题的SQL

1.png

3、点击Tune按钮,自动生成大量的等价SQL并且开始执行。虽然测试还没有完成,我们已经可以看到 SQL 20 的性能提升了100%。

1.png

让我们仔细看一下SQL 20, 它使用了两个Hints, 以最快的执行速度脱颖而出。原来的SQL要0.99秒,优化后的SQL执行时间接近0秒。

由于这条SQL每天要在数据库中执行上万次,优化后可节省大约 165秒的数据库执行时间。1.png

最后,用等价的SQL 20 替换 应用程序源代码中有性能问题的SQL。重新编译应用程序,性能得到了提高。

调优任务顺利完成!

相关文章:

Sql效能优化总结与sql语句优化篇

SQL语句优化原则,sql语句优化

相关视频:

MySQL优化视频教程—布尔教育

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

sql数据库语句优化分析和优化技巧总结(sql优化工具)

sql数据库语句优化分析和优化技巧总结(sql优化工具):通常sql数据库需要进行优化分析,并且还有一定的技巧,sql优化的几种方法这里就不做详细介绍了,本文将会sql语句优化进行总结,后面还附了优化工具SQL Tuning Expert for Oracle及使用方法,首先我们要遵随数据库优化的几个原则:1.尽量避免在列上做运算,
推荐度:
标签: 方法 工具 数据库
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top