如何提高SQL语言的查询效率?
问:请问我如何才能提高SQL语言的查询效率呢?
答:这得从头说起:
由于SQL是面向结果而不是面向过程的查询语言,所以一般支持SQL语言的大型关系型数据库都使用一个基于查询成本的优化器,为即时查询提供一个最佳的执行策略。对于优化器,输入是一条查询语句,输出是一个执行策略。
一条SQL查询语句可以有多种执行策略,优化器将估计出全部执行方法中所需时间最少的所谓成本最低的那一种方法。所有优化都是基于用记所使用的查询语句中的where子句,优化器对where子句中的优化主要用搜索参数(Serach Argument)。
搜索参数的核心思想就是数据库使用表中字段的索引来查询数据,而不必直接查询记录中的数据。
带有 =、<、<=、>、>= 等操作符的条件语句可以直接使用索引,如下列是搜索参数:
emp_id = "10001" 或 salary > 3000 或 a =1 and c = 7
而下列则不是搜索参数:
salary = emp_salary 或 dep_id != 10 或 salary * 12 >= 3000 或 a=1 or c=7
应当尽可能提供一些冗余的搜索参数,使优化器有更多的选择余地。请看以下3种方法:
第一种方法:
select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (department.dep_code='01') and (employee.dep_code='01');
它的搜索分析结果如下:
Estimate 2 I/O operations
Scan department using primary key
for rows where dep_code equals '01'
Estimate getting here 1 times
Scan employee sequentially
Estimate getting here 5 times
第二种方法:
select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (department.dep_code='01');
它的搜索分析结果如下:
Estimate 2 I/O operations
Scan department using primary key
for rows where dep_code equals '01'
Estimate getting here 1 times
Scan employee sequentially
Estimate getting here 5 times
第一种方法与第二种运行效率相同,但第一种方法最好,因为它为优化器提供了更多的选择机会。
第三种方法:
select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (employee.dep_code='01');
这种方法最不好,因为它无法使用索引,也就是无法优化……
使用SQL语句时应注意以下几点:
1、避免使用不兼容的数据类型。例如,Float和Integer,Char和Varchar,Binary和Long Binary不兼容的。数据类型的不兼容可能使优化器无法执行一些本可以进行的优化操作。例如:
select emp_name form employee where salary > 3000;
在此语句中若salary是Float类型的,则优化器很难对其进行优化,因为3000是个整数,我们应在编程时使用3000.0而不要等运行时让DBMS进行转化。
2、尽量不要使用表达式,因它在编绎时是无法得到的,所以SQL只能使用其平均密度来估计将要命中的记录数。
3、避免对搜索参数使用其他的数学操作符。如:
select emp_name from employee where salary * 12 > 3000;
应改为:
select emp_name from employee where salary > 250;
4、避免使用 != 或 <> 等这样的操作符,因为它会使系统无法使用索引,而只能直接搜索表中的数据。
→我是小木鱼(Lag)
写于2000年12月16日
分享到:
相关推荐
达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子...
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL...
一本很好的sql教程,让你提高你的sql查询效率.
无论是准备面试、提升工作效率还是转换职业路径,本系列课程都将为你提供宝贵的知识和技能。 完成本系列课程后,学习者将能够: 熟练使用SQL进行数据定义、操作和控制。 设计和实现高效、可扩展的数据库系统。 优化...
第三章:SQL查询与数据检索 第四章:SQL高级查询技术 第五章:数据库设计原则 第六章:SQL与Python的交互 第七章:数据库性能优化 第八章:数据库安全与管理 第九章:NoSQL与大数据 第十章:SQL在实际项目中的应用 ...
[b]方法一、尽量使用复杂的SQL来代替简单的一堆SQL[/b] 同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率,有多个查询时,要善于使用JOIN。 oRs=oConn.Execute(“Select * FROM Books”) while ...
我国城市公交乘客信息系统的发展处于一个较...通过这样的系统,我们可以做到信息的规范管理和快速查询,实现了公交信息管理的系统化、规范化和自动化,这样不仅减少了管理工作量,还提高了管理效率,降低了管理成本。
微软全球授权和定价 (WWLP) 小组最近开发了一套新的企业授权应用... 他们通过充分利用 SQL Server 公共语言运行时 (CLR) 支持节省了开发资源,SQL Server 公共语言运行时支持重新使用为客户端应用程序赋能的业务组件。
2、PL/SQL语言集成了面向过程语言的过程结构和强大的数据库操作,为设计复杂的数据库应用提供了功能强大、健壮可靠的程序设计语言 3、PL/SQL语言专门用于在各种环境下对Oracle数据库进行访问。由于PL/SQL语言集成于...
本论文叙述了考试方式的历史、现状以及ASP语言和SQL SEVER2000数据库管理系统的概况。重点介绍了无纸化网络考试系统的实现过程:包括系统分析、 系统调查、 数据流程分析、功能设计、 数据库设计、 系统物理配置方案...
该系统通过结合PHP编程语言和SQL数据库技术,实现了对学生成绩的快速查询、录入、修改和统计,提高了学校成绩管理的效率和准确性。 该系统具有以下特点: 用户界面友好:采用简洁明了的界面设计,用户可以轻松上手...
主要功能是提供许多DBA数据库管理的功能,使ORACLE工程师不仅可以使用PL/SQL Developer进行开发设计,同时也可以进行数据库管理及监控,大大提高工作效率。 功能列表: 1.表空间管理 2.初始化参数管理 3.重做日志...
该系统利用PHP编程语言和SQL数据库技术,实现了对学生公共课平时成绩的快速查询、录入和管理,极大地提升了成绩管理的便捷性和效率。 以下是该系统的主要特点和功能简介: 一、用户友好界面 系统采用直观易用的...
通过这样的系统,可以做到信息的规范管理和快速查询,实现了公交信息管理的系统化、规范化和自动化,这样不仅减少了管理工作量,还提高了管理效率,降低了管理成本。本系统采用B/S体系结构,不论是用户或是游客只要...
该考勤系统基于PHP编程语言和SQL数据库实现,旨在提高企业内部考勤管理的效率和安全性。本文档将提供该系统的源代码、毕设文档、答辩PPT和指导书。 ## 系统安全性实现 为确保考勤系统的安全性,我们采取了以下措施...
SQL语言:MySQL使用结构化查询语言(SQL)作为与数据库交互的标准语言。通过SQL语句,可以对数据库进行增删改查操作,创建表和索引,以及定义触发器、存储过程等。 安全性:MySQL提供了许多安全功能来保护数据库的...
Oracle收购Mysql后,技术有了融合和提升,对视图和子查询支持更好,所以我也在mysql采用了带子查询的视图,提高了开发效率。Oracle 的SQL采用的雷PASCAL语言,能熟练掌握SQL和PL/SQL,那么你的程序开发水平一定不差...
为了提升全文索引过程的效率,Microsoft SQL Server 2005 改进了全文收集机制的体系结构,从而大大增强了性能。 Microsoft Full-Text Engine for SQL Server (MSFTESQL) 服务是一个全文索引和搜索引擎。MSFTESQL ...
C# + SQL Server 本系统包括两类用户:学生、管理员。管理员可以通过系统来添加管理员信息、修改管理员信息、添加学生信息、修改学生信息;开设课程、查询课程、录入成绩、统计成绩 管理系统是一种通过计算机技术...
^优化启动时的部分设置,提高效率,减少资源占用。 1.1.3 *修正内存释放问题,旧版会造成内存递增。 1.1.2 ^计划任务、执行脚本、恢复和备份数据库时,不限制指令执行等待时间,以免超时; *修正部分文字内容的...