彩票走势图

数据库管理工具Navicat使用教程:介绍常见的SQL 查询错误(二)

翻译|使用教程|编辑:董玉霞|2022-06-17 11:12:46.200|阅读 197 次

概述:本文将介绍常见的SQL 查询错误, 数据库管理工具Navicat for MySQL是一套管理和开发 MySQL 或 MariaDB 的理想解决方案。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

本文将介绍常见的SQL 查询错误, 数据库管理工具Navicat for MySQL是一套管理和开发 MySQL 或 MariaDB 的理想解决方案。

Navicat for MySQL官方正版下载

非 SARGable 查询条件

像大多数编程人员一样,数据库开发人员或多或少倾向于编写直接翻译给定请求的代码。大多数编程语言(包括 SQL)被设计为更易于人们阅读,这也导致了一个问题。为什么会有问题?所有编程语言都能比其他语言更快地执行某些操作。在关系数据库中,查询优化器用于分析 SQL 查询并确定称为查询计划的有效执行机制。优化器能为每个查询生成一个或多个查询计划,每个查询计划代表运行查询的一种可能方式。然后选择并使用最有效的查询计划来运行查询。事实证明,模仿请求语言的 SQL 很少是最有效的方法。

在常见的 SQL 查询错误系列的这一部分中,我们将探讨一个编写不佳的 SQL 语句的示例,并以提高效率的方式重写它。

将索引列传递给函数

在数据库开发人员的代码中反复出现的一个错误是将索引列传递给函数。为了说明,我们会对这个表运行一个查询,该表在 varchar customerName 列上有一个索引:

数据库管理工具 Navicat Premium 16

当要求检索名称以字母“R”开头的所有客户时,可能倾向于使用 LEFT() 函数返回 customerName 列的第一个字符:

数据库管理工具 Navicat Premium 16

不幸的是,将索引的 customerName 列传递给函数,查询引擎必须评估表中每一行的结果!

SARGable 与非 SARGable 查询

在关系数据库中,有一个术语源自 Search ARGument ABLE 的缩写,又名 SARGable。如果 DBMS 引擎可以利用索引来加速查询的运行,则查询中的条件(或谓词)被称为 SARGable。另一方面,未能成为 SARGable 的查询称为非 SARGable 查询。其效果类似于在没有索引的书中搜索特定术语,每次都从第一页开始,而不是跳到索引中标识特定页的列表。显然,这对查询时间有负面影响,因此查询优化的其中一个步骤是将此类条件转换为 SARGable。

若要将上述条件变为 SARGable 条件,我们需要避免在索引列上使用函数。为此,我们必须使用 Like 运算符,这个逻辑等效(和 SARGable)的查询来表达请求:

数据库管理工具 Navicat Premium 16

请注意,运行时间大大缩短。

更多有关Navicat for MySQL使用教程可点击查看,欢迎加入Navicat for MySQL技术交流QQ群:765665608

Navicat for MySQL | 下载试用

Navicat for MySQL是管理和开发 MySQL 或 MariaDB 的理想解决方案。它是一套单一的应用程序,能同时连接 MySQL 和 MariaDB 数据库,并与 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure、阿里云、腾讯云和华为云等云数据库兼容。这套全面的前端工具为数据库管理、开发和维护提供了一款直观而强大的图形界面。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关产品
Navicat for MySQL

Navicat for MySQL 是一套管理和开发 MySQL 或 MariaDB 的理想解决方案。

Navicat for Oracle

Navicat for Oracle是一套超强的Oracle数据库系统管理工具,包括数据模型工具、数据或结构同步、导入或导出、和报表,令维护数据的进程更容易。

Navicat Premium

Navicat Premium 是一套数据库管理工具,让你使用一个程序即可同時连接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。

title
title
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP