SQL语言艺术(八)认识困难:处理困难

本章讨论对SQL而言实际中经常遇到的困难与相应的解决策略

[b][size=medium]看似高效的查询条件[/size][/b]

有些选择条件乍一看很高效,但需要稍加修改才能发挥潜力。遇到基于键值的一部分比较等特殊情况,比如信用卡前置码比较,可使用范围条件来表达,并尽量使用下限和上限值
select count(*)
from credit_card_check
where ? like prefix + '%'

如果prefix字段长度可变,很可能无法使用这个字段上的索引,可以将条件改为:
where substring(? + '0000000000000000000', 1, 19) between lower_bound
and upper_bound

[b][size=medium]抽象层封装不当[/size][/b]

在程序中对数据库访问进行封装时,有很多需要注意的地方。比如先查出一批数据,然后在程序中进行过滤,这时应该考虑将过滤直接放在SQL中

[b][size=medium]分布式系统的复杂性[/size][/b]

在分布式系统的情况下,不仅访问远程服务器会造成性能下降,如果本地无法访问远程数据库的字典信息,则优化器无法进行适当的优化

尽量在靠近数据的地方进行过滤操作,如果查询要连接远程的多张表,最好先在远程服务器上join好涉及到的表,再接结果返回到与本地表进行join操作,这种情况下可以考虑将远程表的join操作定义成视图,避免DBMS分别读取两个远程表的数据

[b][size=medium]动态定义的搜索条件常常成为性能瓶颈[/size][/b]

动态条件背后是一连串可怕的需求:支持用户通过界面输入搜索条件和排序条件。这类应用一般表现为:开始查询执行地相当好,但随着时间的推移,查询变得非常慢。此类问题很难修正,因为所有的东西都是动态的。要查询的是相同表的相同字段,而搜索条件会发生变化,成功的关键是如何聪明地产生SQL查询

select语句中有可能要用到distinct,因为如果用户没有输入任何条件,返回的结果里面可能会有重复记录。另外不能直接将SQL语句与用户的输入值进行拼接,而是以'?'做为占位符,采用SQL预编译的形式,一方面数据库会缓存预编译的SQL,便于重复使用提高性能,另一方面可以避免SQL注入的漏洞

动态拼接没有完美的解决方案,从设计简单角度讲,可能会把所有涉及的表都预先连接好,再动态生成用户输入的过滤条件。如果负载量比较大,出现性能问题的时候,可以考虑定制SQL,即根据用户的输入只连接需要的表,但这会加大设计上的复杂度。以更聪明的方式建立查询,可以更好地控制安全性,结果正确性和性能,而更为简单的解决方案可能会牺牲某一方面的质量,具体的方案要视实际情况而定
知识图谱-KGE-语义匹配-双线性模型-2018:SimplE 【paper】 SimplE Embedding for Link Prediction in Knowledge Graphs 【简介】 本文是加拿大英属哥伦比亚大学的两位学者发表在 NIPS 2018 上的工作,文章提出了 SimplE(Simple Embedding)。这篇和前面一篇差不多,也是对 1927 年的 CP 进行改进(简化),传统CP为实体分配的两个向量是独立训练的,SimplE利用关系的逆在三元组打分函数中加上了一个对称项,使得每个实体的两个向量依赖学习,并且 SimplE 的复杂度随 阅读详情

相关推荐

ANSYS 2022R2 安装教程:系统准备、许可证配置与故障排查

ANSYS 是面向工程仿真的多物理场商业软件平台,其安装远非普通应用软件的图形化向导流程,而涉及操作系统版本、运行库精确版本、硬件虚拟化支持、许可证服务架构等系统级配置。理解 ANSYS License Manager 的服务机制与端口依赖、掌握 Visual C++ 和 .NET Framework 的启用逻辑,是保障 Fluent、Mechanical、HFSS 等求解器稳定调用的基础。该技术栈广泛应用于高校教学、航空航天结构分析、电子设备电磁兼容仿真等场景。本指南聚焦 ANSYS 2022R2 版本在

weixin_28559803的博客 578

sql语言艺术

查询的识别 查询的识别 总结:易识别的语句有助于定位性能问题。 尽量给语句添加注释或使用oracle自带的函数来标明应用的信息。 保持数据库连接稳定 总结:数据库连接和交互好似万里长城——长度越长,传递消息越耗时。 减少数据库的连接次数,使用数据库连接池。 战略优先于战术 总结:考虑解决方案的细节之前,先站得远一些,把握大局。 可以从业务的角度思考,想想数据的来源与去处是不是有其他路径可寻。 先定义问题,再解决问题 总结:先打基础,再赶时髦:摆弄新工具之前,先把...

hoho_12 474

国产麒麟系统PXE安装-UEFI引导

注意: 适用uefi引导 适用x86_64架构 一键部署脚本扣我 1.上传ISO到PXE服务器,拷贝ISO文件 # mkdir /kylin_iso # mount -o loop Kylin-Server-10-SP1-Release-Build04-20200711-x86_64.iso /kylin_iso/ 2.配置http,获取安装源 # yum -y install httpd # mkdir /var/www/html/{ks,kylin} # 注意一定是"/kylin_iso/

河静 5046

SQL语言艺术

SQL 语言艺术 内容介绍 本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例 子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你 的实际工作提出了具体建议。本书适合SQL数据库开发者、软件架构师,也适合DBA,尤其是 数据库应用维护人员阅读。 资深SQL 专家Stéphane Faroult倾力打造 《软件架构设...

tianju517的专栏 464

电商平台大数据分析指标

一、五大关键数据分析指标 1.1活跃用户量 活跃用户量是一个基本的指标,有 DAU(日活跃用户)、WAU(周活跃用户)和 MAU(月活跃用户)三个层次; 1.2转化 转化是一个非常重要的指标,电商运营需要关注主路径、次路径甚至精细到每一个品类 / SKU 的转化率; 1.3留存 留存要从不同的时间周期上研究,包括次日留存率、3 日、7 日、30 日留存; 1.4复购 复购则要从 3 个角度去看,复购用户量、复购率和复购金额比; 1.5GMV GMV 是最重要的指标,我们的运营最终是围绕这

默主归沙的博客 4815

通达信波段交易公式实战:如何用副图指标精准捕捉买卖点(附完整源码)

本文深入解析通达信波段交易副图指标的构建与应用,提供完整源码实现,帮助投资者精准捕捉买卖点。通过趋势强度度量、超买超卖判断及信号过滤机制,结合K线图分析,有效提升波段交易的成功率。

weixin_29306317的博客 590

【转】SQL语言艺术

SQL 语言艺术 内容介绍 本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例 子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你 的实际工作提出了具体建议。本书适合SQL数据库开发者、软件架构师,也适

Fighting with Winston Shao 4664

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)。

非科班Java出身GISer的博客 690

SQL语言艺术学习总结(一)

       这几天看了《SQL语言艺术》一书,对其中提到的数据库开发过程中应该关注的问题进行一下总结: 1.查询的识别:        尽管许多产品提供良好的监控工具,但要确定一小段S QL 语句与整个系统的关系,有时却非常困难。因此,要养成为程序和关键模块加注释的习惯,在S QL 中插入注释有助于辨别查询在程序中的位置。例如: /*CU  S T O ME  R RE  G I S T...

wangshuxing的专栏 347

【云原生】Docker可视化工具Portainer使用详解

Docker可视化工具Portainer使用详解

congge 1万+

基于Simulink的鲸鱼优化算法(WOA)MPPT仿真

摘要:本文介绍了基于Simulink的鲸鱼优化算法(WOA)在光伏MPPT控制中的应用。WOA模拟座头鲸的"气泡网捕食策略",通过包围猎物、螺旋收缩和随机搜索三阶段动态平衡全局探索与局部开发能力,有效解决局部阴影导致的多峰P-V曲线问题。文章详细讲解了WOA-MPPT的Simulink建模过程,包括多峰光伏阵列建模、WOA控制器实现和Boost变换器控制。仿真结果显示,在三种典型工况下,WOA-MPPT的追踪效率>99.3%,动态响应时间<0.15s,性能优于传统算法。最后提出了混合WO

amy_mhd的博客 69

《sql语言艺术》读书笔记-函数知多少

1. translate()           字符串搜索和替换   2. row_number() over(partition by column1 order by column2)          根据column1分组,根据column2排序后,对每组内部

luan_qibazao的专栏 472

基于simulink的电动汽车电机驱动系统IGBT开路故障检测

本文介绍了基于Simulink的电动汽车电机驱动系统IGBT开路故障检测方法。通过搭建永磁同步电机(PMSM)驱动系统模型,实现IGBT开路故障注入,并设计基于电流平均值与PWM逻辑比较的故障检测算法。系统可实时采集三相电流信号,通过MATLAB Function模块实现故障诊断,当检测到PWM信号与电流不匹配时输出故障报警。仿真结果显示,系统能在2.05秒内准确识别A相上管开路故障,并通过Scope和XYGraph直观展示故障特征。该方法为电动汽车电力电子系统故障诊断与容错控制提供了实用解决方案,后续可扩

xiaoheshang_123的博客 148

SQL语言艺术30则

1. 表中有些字段出现了空值,表明需要引入子类型。 2. 性能拙劣的罪魁祸首,是错误的设计。 3. 在合理范围内,利用每次数据库访问完成尽量多的工作 4. 只要有可能,应尽量...

coollei2008的博客 273

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

读《SQL语言艺术》设计(2)

    今天要说的是索引,很奇怪是吧,题目是设计,索引是用来优化查询的,似乎是跑题了。    其实不完全是。索引的确是用来优化查询的,但索引不能在出现查询性能糟糕的时候才考虑,而是应该在数据库设计的时候就预先予以考虑。    任何事物都是对立共同体,都具有两面性。数据库也不例外,查询和数据更新(这里的更新是 change 包括 插入 insert、修改 update、删除 delete

Winter_Lee_8098的专栏 614

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《sql 语言艺术》 概要

http://www.oreilly.com/catalog/artofsql (原书)http://www.oreilly.com.cn/book.php?bn=978-7-121-05834-9 (中文版)  数据库技术是企业信息化开发的基础。在制造业信息化领域从业多年,自己对这块知识却一直零碎杂乱,应该理顺思路,为架构设计的目标建立基础。       此书以明确应用原则,

taoyuan2615的专栏 986

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SQL语言艺术(一)制定计划:为性能而设计

第一章强调良好的模型和合理的数据库设计的重要性 sql的背后有着关系模型的数学理论做为基础,以前一直以为关系模型指的是一个表通过外键与其它表关联起来,实际却不是这样。关系模型不是因为不同表之间建立了关系,而是因为表内不同字段之间存在关系。几个值就处于表的同一行,它们之间就存在关系。关系理论的关键原理是:关系不包含重复数据,且记录之间没有顺序 规范化是关系理论很重要的一部分,它的原理是按...

better java 144

SQL语言艺术实践篇——局外思考

今天有个同事问我一个问题,描述如下: 有一个日志信息表,对应同一个ID,可能有一条、两条、三条不同状态的记录。例如ID= 10001的日志记录可能有三条,一条记录状态为正确, 一条记录状态为错误, 一条记录状态是未知。也有可能只有其中一条记录或两条,现在的问题是,对应同一日志ID,我们只需要取一条记录,取数规则是: 1:如果有状态为正确、错误、未知三...

weixin_33947521的博客 129

sql语言艺术(1) 接近dbms核心

<br />第38-40有三个不同的函数,实现同样的目的,去除字符串中多个相邻的空格:1.用PL/SQL循环处理字符 2.Instr()+ltrim() 3.循环调用replace() 书中的数据是所需时间越来越短,但失策是时间基本差不多(5秒多,相对于书中的不到一秒可以归因于服务器比较挫),但多次运行基本上是第一个时间最短就不能用服务器的性能来解释了。书中的“代码喜欢SQL内核---离核心越近,它就运行得越快。”主观是同意的,但是运行结果无法解释。标记一下,有知道的朋友可以留言。

zhangmingleon的专栏 542

SQL语言艺术(九)多条战线:处理并发

这章讨论如何应对大量并发用户的情况 一个测试时很高效的查询可能在大并发情况下执行地很慢,而且当大量语句并发执行,如果SQL语句提交的速度比服务速度要快时,系统性能就会出现严重问题,所有查询都会受到影响,原先较快的查询也会变慢 负载增加未必是造成性能问题的原因,它只不过使性能问题暴露出来了而已。此时,建议改善程序,而不是升级硬件 修改操作本质上比查询代价更高,不仅牵涉取得数据,还涉...

better java 151

Filtering[SQL语言艺术]

在编写查询之前,我们甚至应该对过滤条件进行排序,真正高效的条件(可能有多个,涉到同的表)是查询的主要驱动力,低效条件只起辅助作用。那么定义高效过滤条件的准则是什呢?首先,要看过滤条件能否尽快减少必须处理的数据量。所以,我们必须倍加关注条件的写方式。 假设有四个表: customers 、 orders 、 orderdetail 、 articles ,现在假设 SQL 要处理的问...

weixin_33860722的博客 137

SQL语言艺术(前言)

IT行业发展的过程中,新技术层出不穷,今天数据处理依然是系统的核心。与以往不同的是,需要处理的数据量程指数级别增长,甚至超过的硬件的增长速度,所以仅仅做到正确处理还不够,必须足够的快。 对于数据库的性能问题,开发人员的一惯做法是先写出正确的程序,一旦出现问题,再由DBA来解决,这种做法未能从源头上解决性能问题。首先关注性能问题的应该是开发者,但开发者不一定非常熟悉硬件、DBMS以及各种数据库...

better java 153
上一篇: SQL语言艺术(七)变换战术:处理层次结构
下一篇: SQL语言艺术(九)多条战线:处理并发
pagx007
博客等级 码龄19年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值