
SQL调优及高级SQL语法编写
文章平均质量分 71
以SQL Server为例,讲述SQL调优以及SQL中进行Web开发,专栏包含存储过程、函数、触发器、表变量、临时变量、游标、JSON解析、WEBAPI调用,邮件发送、HTML生成,SQL中DLL调用等高级SQL用法。满足用SQL完成应用程序开发。订阅专栏可提供专业指导。
Favor_Yang
上市企业技术负责人,全栈开发工程师。熟悉各种企业级管理系统方案设计、开发、实施等工作。
作为技术负责人,带领团队申请多项软件著作权,在系统架构设计,系统开发方面有较丰富的经验。
如有IT方面的需求,闲暇时可提供技术支持。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SQL Server通过存储过程调用DLL程序集发送飞书卡片消息
在现代企业应用开发中,数据库系统与即时通讯工具的集成变得越来越重要。SQL Server作为一款功能强大的关系型数据库管理系统,可以通过存储过程实现各种自动化任务,包括发送通知消息。本文将详细介绍如何在SQL Server中创建存储过程,通过HTTP请求与飞书开放平台API交互,实现发送富文本卡片消息的功能。SQL Server发送飞书卡片消息的应用场景非常广泛,包括但不限于:实现这一功能主要涉及以下技术组件:在开始实现之前,请确保满足以下环境要求:创建飞书应用:获取凭证信息:获取webhook地址(可选)原创 2025-07-10 11:41:37 · 218 阅读 · 0 评论 -
SQL Server 解决游标性能问题的替代方案
游标虽然功能强大,但在处理大量数据时可能会导致性能问题。通过使用 WHILE 循环、SET 操作、ROW_NUMBER() 和 CTE、MERGE 语句、表变量以及 APPLY 操作符等替代方案,可以提高查询性能和代码的可维护性。选择合适的替代方案取决于具体的应用场景和需求。原创 2024-12-18 14:53:18 · 516 阅读 · 0 评论 -
SQL Server 表值函数使用场景有哪些
表值函数在 SQL Server 中提供了强大的数据处理能力,适用于多种场景。通过将复杂的查询逻辑封装在函数中,可以提高代码的可读性和可维护性,同时简化主查询的编写。根据具体需求选择合适的表值函数类型(内联表值函数或多语句表值函数),可以有效提升数据库性能和开发效率。原创 2024-12-16 16:37:39 · 373 阅读 · 0 评论 -
考勤统计,一张表查询每月的员工考勤数据
近期根据公司人事要求,写了一些关于考勤统计的报表。主要是查询员工每月的考勤数据,要求一行数据显示员工的当月的每天的考勤信息,标的样式如下:然后,根据考勤表,写了如下SQL语句,来实现报表的查询,谨以此做记录,以备后续查阅。SELECT DeptName AS 所属部门, UserName AS 员工姓名...原创 2019-10-18 11:09:13 · 9183 阅读 · 1 评论 -
SQL Server通过CLR连接InfluxDB实现异构数据关联查询技术指南
摘要:本文提出一种基于CLR DLL直连的跨库实时查询方案,解决工业物联网和金融场景中InfluxDB时序数据与SQLServer业务数据毫秒级关联分析的需求。通过C#编写DLL组件实现InfluxDB API调用,在SQLServer中创建CLR函数直接查询时序数据,并与业务元数据实时关联。方案包含DLL开发、SQL集成、性能优化(缓存/降采样)等完整实现,实测延迟<100ms,应用于汽车制造设备监控使故障响应时间从小时级降至秒级。同时对比了Telegraf插件等替代方案,并给出安全配置和云原生扩展原创 2025-07-11 13:30:30 · 80 阅读 · 0 评论 -
AI技术重塑工业制造:从智能应用到大型模型落地
摘要: 工业4.0时代,AI技术成为制造业变革的核心驱动力,可提升效率20%-30%,降低缺陷率40%-60%。本文探讨AI在工业的两大方向:一是行业应用,如基于卷积网络的智能质检(准确率≥99.2%)和LSTM驱动的预测性维护(减少停机45%);二是大模型实践,如工业知识引擎(微调LLM处理工艺文档)和多模态报告生成(时间缩短93%)。技术融合方面,数字孪生与AI协同优化生产参数,供应链模型动态平衡库存与需求。关键挑战在于边缘计算延迟与领域知识注入,未来将迈向工业5.0的自进化体系,实现“零缺陷、零浪费、原创 2025-07-11 11:18:17 · 128 阅读 · 0 评论 -
SQL Server通过存储过程实现企业微信消息卡片推送
本文介绍了利用SQLServer存储过程实现企业微信消息卡片推送的技术方案。该方案采用三层架构:数据层处理业务逻辑并生成消息内容,传输层通过OLEAutomation发送HTTP请求,应用层接收消息。实现步骤包括配置OLEAutomation、编写存储过程发送消息、以及Token管理。方案适用于审批提醒、系统监控等场景,具有高效执行、业务集成度高的优势,但需考虑权限控制、网络稳定性等问题。文中还提供了典型应用示例和性能优化建议,是数据库与企业微信集成的实用解决方案。原创 2025-07-10 09:11:18 · 116 阅读 · 0 评论 -
SQL Server通过存储过程实现HTML页面生成
SQLServer存储过程生成HTML技术直接通过数据库层实现数据可视化,适用于动态报表、自动化邮件等场景。核心步骤包括:构建静态HTML框架,使用FORXMLPATH和字符串拼接动态填充数据,添加CSS样式和JavaScript交互。该方法减少中间层依赖,提高响应速度,但需注意版本兼容性(SQL2016+功能更优)、大数据集分页处理以及XSS安全防护。适用边界为中小规模数据展示,可扩展集成邮件发送或文件导出功能。典型应用包括每日销售邮件、内部仪表盘等自动化报表场景。原创 2025-07-09 16:53:39 · 116 阅读 · 0 评论 -
Oracle存储过程导出数据到Excel:全面实现方案详解
本文系统介绍了Oracle存储过程导出Excel的四种技术方案:1)UTL_FILE生成CSV(适用于简单结构化数据);2)PL/SQL输出HTML格式(快速可视化方案);3)Java集成Apache POI(处理百万级复杂数据);4)APEX实现RESTful服务(云环境首选)。通过性能对比显示,10万行以内数据PL/SQL方案效率最优,而大数据量场景建议采用Java异步处理。文章提供了完整代码示例和方案选型决策树,建议根据数据规模(≤50万行选CSV)、格式复杂度(需要图表选Java)和部署环境(云服务原创 2025-07-09 16:32:22 · 243 阅读 · 0 评论 -
SQL Server使用存储过程导出数据到Excel实现方式
本文详细介绍四种通过SQLServer存储过程导出数据到Excel的技术方案:1) OLE Automation适用于中小数据量(<10万行)的精细格式控制;2) BCP批量导出适合百万级大数据量的高效处理;3) SSIS集成服务用于需要复杂转换的定期自动化任务;4) OPENROWSET直连实现实时数据追加。文章对比了各方法的优势、局限性和适用场景,提供代码实现示例,并给出常见问题解决方案和性能优化建议。实施时需根据数据量、格式要求和执行频率选择合适方案,同时注意环境配置和权限设置。原创 2025-07-09 10:44:36 · 112 阅读 · 0 评论 -
SQL Server 临时表、表变量与WITH语句的用法与区别
SQL Server 数据处理中,临时表、表变量和 CTE 是三大中间结果集工具。临时表适合大数据操作(10万+行),支持索引和事务;表变量内存优先,千行内操作比临时表快3-5倍;CTE 则简化复杂查询逻辑,支持递归处理。选型需考虑数据量、事务需求和代码可读性:小数据用表变量,大数据选临时表,复杂查询优先 CTE。测试表明,临时表10万行插入耗时1.2秒,表变量千行聚合比临时表快3倍,CTE 多表连接比子查询快40%。关键在于根据实际执行计划灵活选择。原创 2025-07-08 14:30:41 · 479 阅读 · 0 评论 -
SQL Server 数据库日志收缩详细操作步骤
SQLServer事务日志管理摘要:事务日志记录数据修改,支持事务回滚和恢复。日志过快增长通常由未备份、恢复模式不当或长事务导致。收缩操作前需检查日志使用情况(DBCC SQLPERF),备份日志(BACKUP LOG)是释放空间的前提。通过DBCC SHRINKFILE收缩,注意目标大小应大于已用空间。建议配置合理的自动增长参数,定期备份监控,避免频繁收缩。高可用性环境需特殊处理,AlwaysOn需确认同步状态。最佳实践包括定期维护、合理配置、主动监控和操作验证。原创 2025-07-08 13:44:09 · 228 阅读 · 0 评论 -
MySQL不同场景批量插入数据的方式详解
批量插入数据是提升数据库性能的关键技术。单条插入效率低,适合小数据量;多值INSERT语句减少网络开销,适用于中等数据量;LOAD DATA INFILE文件导入性能最优,适合百万级数据迁移。预处理语句结合事务控制可平衡安全与性能,建议单批次处理1000-5000条数据。特殊场景可采用分区表并行插入或冲突处理策略(IGNORE/REPLACE/ON DUPLICATE)。测试显示不同方法性能差异显著:单条插入85秒 vs LOAD DATA的0.4秒(10万条数据)。应根据数据规模选择方案,合理优化后性能可原创 2025-07-07 17:03:53 · 209 阅读 · 0 评论 -
SQL Server不同场景批量插入数据的方式详解
摘要:SQL批量数据插入主要采用6种方法:1)VALUES多行语法(适合小批量测试数据);2)SELECT导入(表间迁移);3)BULKINSERT(CSV文件高速导入);4)SqlBulkCopy(.NET程序化操作);5)表值参数(存储过程批量处理);6)MERGE语句(数据同步)。优化建议包括控制批量大小(500-5000行/批)、禁用非必要索引、采用简单恢复模式等。性能排序显示BULKINSERT吞吐量最高(5万+行/秒),而VALUES语法最低(1000-5000行/秒)。特殊场景需考虑分区表切换原创 2025-07-07 15:56:10 · 75 阅读 · 0 评论 -
Oracle数据库不同场景批量插入数据的方式汇总
Oracle数据库提供多种批量数据插入方法:从单条INSERT适用于少量数据,到INSERT ALL和FORALL提高中等批量效率;Bulk Binding和外部表适合程序化数据加载和文件导入;SQL*Loader和Data Pump工具处理海量数据;表空间传输和分区交换实现极速迁移;并行DML利用多核资源。选择方法需考虑数据量、来源和硬件条件,组合使用可显著提升性能,同时需注意事务空间和锁定影响。原创 2025-07-07 15:49:31 · 163 阅读 · 0 评论 -
SQL Server表分区技术详解
表分区是将大型数据库表物理分割为多个较小单元的技术,逻辑上仍表现为单一实体。该技术通过水平分割数据显著提升查询性能,尤其针对TB级数据表可降低90%的响应时间。典型应用场景包含订单历史表、日志记录表等具有明显时间特征的业务数据,以及需要定期归档的审计跟踪表。数据生命周期管理通过分区技术变得高效,可将旧数据迁移至低成本存储,同时保持最新数据在高速磁盘。维护操作如索引重建、统计更新可按分区执行,某金融案例显示千亿级数据表的索引维护时间从8小时缩减至15分钟。原创 2025-07-07 15:39:49 · 196 阅读 · 0 评论 -
Oracle数据库通过存储过程调用飞书接口推送群组消息
本文详细介绍了Oracle数据库与飞书API集成的技术方案,实现企业级数据变更实时推送至飞书群组。文档包含8大核心模块:1)技术背景分析传统通知痛点与飞书推送价值;2)飞书接口准备工作;3)Oracle网络通信基础配置;4)存储过程实现Token获取与消息发送;5)安全增强措施;6)测试调试方法;7)性能优化方案;8)典型应用案例。方案支持文本消息、富文本卡片等多种推送形式,通过ACL控制、敏感信息加密保障安全性,并提供异步队列、连接池复用等优化手段。该解决方案可直接部署生产环境,满足订单审批、系统告警等实原创 2025-05-13 13:42:09 · 280 阅读 · 0 评论 -
MySQL数据库故障排查指南
数据库故障排查是确保数据库稳定运行的关键。首先,检查数据库服务状态和网络连接,确认配置文件的正确性。性能问题可通过分析慢查询日志和优化SQL语句来解决。数据一致性需通过事务、外键约束和定期备份来保障。存储问题需监控磁盘空间并优化表结构。日志分析有助于定位问题根源。安全性方面,应定期更新软件、检查权限和启用SSL加密。备份和恢复策略是数据安全的重要保障。使用监控工具和设置报警规则可及时发现潜在问题。整理常见错误代码和解决方案,建立知识库,有助于快速解决问题。推荐使用MySQL Workbench、pgAdmi原创 2025-05-13 13:38:38 · 56 阅读 · 0 评论 -
SQL Server Import of Microsoft Distributed Transaction Coordinator (MS DTC) transaction failed 解决方案
(MS DTC) transaction failed”错误通常是由于分布式事务管理相关的问题。以下是一些详细的步骤和解决方案,帮助诊断和解决这个问题。原创 2025-01-14 13:06:20 · 193 阅读 · 0 评论 -
SQLServer触发器并发死锁问题分析及解决方案
在SQL Server中,触发器(Triggers)是一种特殊的存储过程,当特定的事件(如 INSERT、UPDATE、DELETE)发生时自动执行。然而,触发器在并发环境下可能会遇到一些问题,特别是与性能和数据一致性相关的问题。以下是一些常见的并发问题及其解决方法。原创 2025-01-14 11:31:07 · 198 阅读 · 0 评论 -
MySQL数据库多主模式解决方案
虽然 MySQL 本身不直接支持多主模式,但通过 Galera Cluster、MySQL Group Replication、第三方工具和 MySQL Router 等解决方案,可以实现类似的功能。MySQL 本身并不直接支持多主模式(Multi-Master Replication),即多个主节点可以同时进行写操作,并且这些更改会自动同步到其他主节点。• 自动故障转移:在主节点故障时,自动选择新的主节点。• 自动故障转移:在主节点故障时,自动选择新的主节点。原创 2024-12-23 14:41:10 · 266 阅读 · 0 评论 -
SQL Server数据库多主模式解决方案
虽然 SQL Server 本身不直接支持多主模式,但通过 Always On 可用性组、分布式事务、合并复制、第三方工具和消息队列等方法,可以实现类似的功能。根据具体需求和应用场景,选择合适的解决方案。如果需要真正的多主模式,可能需要考虑使用第三方工具或平台。原创 2024-12-23 14:20:35 · 493 阅读 · 0 评论 -
SQL Server 批量插入数据的方式汇总及优缺点分析
方法特点适用场景简单易用少量数据插入高效,适用于从文件中导入大量数据大型数据集导入OPENROWSET灵活,支持多种数据源灵活,支持多种数据源BCP 命令行工具快速,易于自动化自动化任务SqlBulkCopy 类在应用程序中高效执行批量插入应用程序集成简单高效,适合数据迁移数据迁移MERGE 语句灵活性高,适用于复杂的数据操作复杂的数据操作直接利用存储过程的结果存储过程结果插入。原创 2024-12-19 11:50:25 · 685 阅读 · 0 评论 -
C# 6.0 连接elasticsearch数据库
NEST 提供了丰富的 API 来执行各种操作,如创建索引、索引文档、搜索文档、更新文档和删除文档。在 C# 6.0 中连接 Elasticsearch 数据库,您可以使用官方的 Elasticsearch 客户端库 NEST。接下来,您需要配置 Elasticsearch 客户端以连接到您的 Elasticsearch 实例。您可以使用 NEST 将文档索引到 Elasticsearch 中。如果您还没有创建索引,可以使用 NEST 创建一个新的索引。您可以使用 NEST 更新已有的文档。原创 2024-12-17 13:41:13 · 381 阅读 · 0 评论 -
MSSQL AlwaysOn 可用性组(Availability Group)中的所有副本均不健康排查步骤和解决方法
通过检查副本状态、服务状态、网络连接、防火墙设置、日志文件、磁盘空间、数据库镜像端点、可用性组配置以及尝试恢复和重新配置副本,可以逐步定位并解决问题。当遇到 MSSQL AlwaysOn 可用性组(Availability Group)中的所有副本均不健康的情况时(MSSQL AG '副本名称': All replicas unhealthy),这通常意味着可用性组无法正常工作,数据同步和故障转移功能可能受到影响。确保所有参与可用性组的节点上的 SQL Server 服务和 Windows 服务正在运行。原创 2024-12-17 13:25:49 · 414 阅读 · 0 评论 -
SQL Server 表值函数使用示例
表值函数有两种类型:内联表值函数(Inline Table-Valued Function)和多语句表值函数(Multi-Statement Table-Valued Function)。通过上述示例,你可以了解如何在 SQL Server 中创建和使用内联表值函数和多语句表值函数。内联表值函数使用单个 RETURN 语句返回一个表。1. 性能:内联表值函数通常比多语句表值函数性能更好,因为它们被优化为单个查询计划。3. 调试:调试多语句表值函数可能比内联表值函数更复杂,因为它们包含多个语句。原创 2024-12-17 11:02:31 · 471 阅读 · 0 评论 -
数据库优化时如何查看SQL语句有没有使用索引
要确定查询是否使用了索引,可以通过查看查询的执行计划来判断。大多数数据库管理系统(如MySQL、PostgreSQL、SQL Server等)都提供了工具来生成和查看查询的执行计划。原创 2024-12-16 16:12:23 · 474 阅读 · 0 评论 -
SQL Server 预警Number of index and table scans exceeds index searches in the last 15m
当发现“Number of index and table scans exceeds index searches”时,应仔细分析查询的执行计划,检查索引的使用情况,并根据具体情况采取相应的优化措施。通过创建合适的索引、优化查询条件、更新统计信息和重建索引等方法,可以显著提高数据库的性能。原创 2024-12-16 15:54:18 · 103 阅读 · 0 评论 -
考勤查询统计SQL脚本。
本文主要记录下平时工作中考勤统计中的SQL脚本,用于查询公司当月员工的考勤信息,包含请假,加班,打开等多维度的考勤数据,最终汇合成一张完整的考勤统计报表。分享给大家参考。原创 2018-11-27 08:43:06 · 10746 阅读 · 6 评论 -
年休假扣减顺序存储过程
最近在优化公司的年休假扣减流程,这里写了两种方式,一种是在数据库中使用存储过程,进行年休假顺序扣减。也就是本文的介绍的一种情况,还有一种是在代码中通过积分扣减形式,进行扣减计算。这个将在下一篇文章中介绍。1.年休假统计表的表结构SQL如下,在数据库中执行即可。/****** Object: Table [dbo].[ZZ_HR_ANNUAL_VACATION] Script Date: 2020/5/18 13:55:37 ******/SET ANSI_NULLS ONGOS.原创 2020-05-18 14:01:37 · 632 阅读 · 0 评论 -
SQL Server 实现邮件发送功能(配置步骤及存储过程源码)
本文介绍了利用SQL Server实现邮件推送功能的详细步骤:1)通过数据库邮件配置向导设置邮件服务器参数,包括企业邮箱服务器地址、账号信息等;2)编写存储过程SP_SendWIPReport,实现查询在制数据、获取收件人信息、构造HTML格式邮件内容和生成Excel附件等功能;3)使用sp_send_dbmail系统存储过程发送包含HTML表格和附件的邮件。该方法适用于企业系统中自动发送业务报表等场景,通过SQL Server直接实现无需额外开发邮件发送程序。原创 2023-04-01 15:10:46 · 2855 阅读 · 0 评论 -
SQL Server通过存储过程实现自定义邮件格式并定时发送
SQL Server能够通过SQL语句实现邮件发送HTML页面并推送给指定用户。本文主要分享一个案例,工厂间通过SQL存储过程自定义邮件格式,并发送给工厂中的指定员工。原创 2024-12-16 15:35:44 · 543 阅读 · 0 评论 -
SQL Server 解析JSON复杂的多层级示例
我们的目的呢,就是把JSON串解析出来,并分别保存到生产订单的表里面,这里我们定义为是哪个临时表,分别为#MO-生产订单主表,#MOItem-生产订单明细表,#MOItemProcess--生产订单工序表,然后通过解析JSON串,来把这个数据分别存到三张临时表里面。好,下面我们贴上解析的SQL语句,然后看看解析的效果。首先,构造一个JSON串,JSON串Head,Body,Body包含两个ITEM,分别是生产订单对应的工序明细行和产品明细行,如下所示。原创 2022-07-29 23:01:11 · 1720 阅读 · 0 评论 -
SQLServer 分页分页查询优化方案,1秒内查询20万条数据的表
最近在做sql分页查询的话,发现数据表中的数据量非常大的话,使用count(*)去统计行数的话,还是非常慢的。20多万条数据的表,用count查询,大概在9秒左右。上图可以看到,同样的SQL语句,上面的就是1秒内查询出来的,是不是快了很多。下面也贴出来执行计划,有兴趣的小伙伴可以自己研究下了。服务器是4核8G内存的。上面这种写法,性能瞬间就提上来了,1秒内就查询了出来。原创 2020-11-25 21:10:05 · 3179 阅读 · 0 评论 -
SQLServer获取2020年节假日列表(可用于Java、.NET,Python,C++等实现)
上次写了关于SQLServer获取2019年节假日列表的一个博客,这次根据上次的资源进行更新。参考博文如下:SQL Server 获取2019年节假日列表(可用于Java、.Net系统实现)同样是创建日期表:CREATE TABLE [dbo].[HR_WorkDayList]( [WorkDate] [varchar](10) NOT NULL, [DateType] [nva...原创 2019-11-22 22:53:06 · 1356 阅读 · 1 评论 -
无法为数据库中的对象分配空间,因为‘PRIMARY‘文件组已满问题处理方式
今天公司同事反馈,在手机APP端进行业务操作时,提示无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满,如下所示。出现这个问题的原因是数据库中设置了Log日志限制了文件增长。设置如下所示,然后修改了相关设置,解决该问题。1、硬盘设置格式为FAT32 ,此时可以备份,然后修改为NTFS格式(风险较高的一种方式)2、就是上述所说的属性设置为限制增长,这样数据库到指定的大小之后,就会显示这种问题。3、还有就是磁盘空间的问题了。原创 2019-11-19 09:02:23 · 18664 阅读 · 1 评论 -
SQL语句-考勤统计表按照年份统计员工每月的加班调休数据
加班和请假流程分别是不同的表,员工信息表由于取员工钉钉上的信息和系统内部信息结合,因此,进行关联查询,同时上年度结余信息,单独建立一张表维护,加起来总共五张表。这五张表通过UserID字段进行关联。其中,和钉钉考勤数据关联按照考勤ID去关联。最近在做考勤统计相关的报表,人事要求统计出每位员工每年的的调休和加班统计表。加班分为平时加班和周末加班,节假日加班由于算作工资,因此不统计。平时加班包含上年结余的和本年度的加班相加。然后,在计算出本年度的结余。表结构就不分享出来了,SQL语句可以做参考。原创 2019-10-22 22:14:28 · 2631 阅读 · 0 评论 -
SQL语句删除具有外键约束(foreign key)的表。因为该对象正由一个 FOREIGN KEY 约束引用。
关于包含外键的表,清理数据的时候,如truncateTable,网上大部分的解决办法是,删除外键-》删除数据-》再新建表。这里介绍一种不需要删除外键,只需要修改外键属性就可以删除数据的方式。如上图所示,展开表名,找到外键,双击外键,修改Insert和Update规范下面的删除规则为“级联”,然后保存表,就可以删除数据了。当然,为了保证表还是原先的样子,删除之后也可以把删除规则再修改...原创 2018-12-05 14:19:48 · 7394 阅读 · 0 评论 -
SQL Server执行计划详解
在博客园上看到一篇很不错的讲解SQL执行计划的文章,引用过来以供学习。访问地址:https://www.cnblogs.com/knowledgesea/p/5005163.html下面是关于SQLServer的索引的原理的相关博客,也收藏下。https://www.cnblogs.com/knowledgesea/p/3672099.html同时供大家参考学习。...原创 2019-07-10 13:45:38 · 1938 阅读 · 0 评论 -
Linq两个DateTable Left Join 多条件联合主键关联查询
Linq查询时,关于两个DateTable的关联查询,涉及到多个主键时,我们一般采用On New把字段一一关联。但是DateTable的字段可能不会一样,因此我们可以采用别名的方式,使其一一对应。具体方式如下: new { Name = m.Field<string>("UName"), Date = m.Field<string>("WorkDate") } equa...原创 2018-12-17 15:21:32 · 2679 阅读 · 4 评论