实例讲解MySQL数据库的查询优化技术 (1)(2)

数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用之一。
 从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。

笔者在应用项目的实施中发现,许多程序员在利用一些前端数据库开发工具(如PowerBuilder、Delphi等)开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。本文以应用实例为基础,结合数据库理论,介绍查询优化技术在现实系统中的运用。

分析问题

许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,查询规划是经过优化处理之后所产生的语句集合。DBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。在实际的数据库产品(如Oracle、Sybase等)的高版本中都是采用基于代价的优化方法,这种优化能根据从系统字典表所得到的信息来估计不同的查询规划的代价,然后选择一个较优的规划。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。系统所做查询优化我们暂不讨论,下面重点说明改善用户查询计划的解决方案。

解决问题

下面以关系数据库系统Informix为例,介绍改善用户查询计划的方法。

时间: 2024-08-03 04:35:45

实例讲解MySQL数据库的查询优化技术 (1)(2)的相关文章

实例讲解MYSQL数据库的查询优化技术

mysql|数据|数据库|优化 数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行.企业.政府等部门最为重要的计算机应用之一.从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句.举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时.如果采用比全表扫描更好的查询策略,往往可

MYSQL数据库的查询优化技术

许多程序员在利用一些前端数据库开发工具(如PowerBuilder.Delphi等)开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重.因此,如何设计高效合理的查询语句就显得非常重要.本文以应用实例为基础,结合数据库理论,介绍查询优化技术在现实系统中的运用. 分析问题 许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的.一个好的查询计划往往可以使程序性能提高数十倍.查询计划是

实例讲解MySQL数据库中文问题的解决方法

MySQL数据库中文问题的解决方法: 1.my.ini MySQL配置文件设置 [client] default-character-set=gbk [mysqld] default-character-set=gbk 2.启动MySQL服务创建你的数据库 3.验证当前编码 命令行输入: mysql -u root -p 登录你建立的数据库 >connect yourdatabasename 输入数据库状态命令 >status 假如结果如下: Server characterset: gbk

讲解MySQL数据库与ASP.NET如何强强联手

asp.net|mysql|数据|数据库 由于富有竞争力的价格和易于使用,MySQL在市场占有率方面逐步提升.开放源代码社区为了扩展MySQL的使用范围,开发出了.Net框架(.NET Framework)中可以使用的数据库连接器.我们就来学习一下如何在.Net应用程序中使用MySQL. 和.NET的数据整合 MySQL 社区已经开发出了MySQL的数据接口,他提供了连接数据源和程序代码的基本功能.在Windows平台上,有如下的MySQL连接器: * MySQL Connector/Net 1

数据库的查询优化技术

数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行.企业.政府等部门最为重要的计算机应用之一.从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句.举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时.如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见

MySQL数据库索引查询优化的分享

问题描述: 我们要访问的表是一个非常大的表,四千万条记录,id是主键,program_id上建了索引. 执行一条SQL: select * from program_access_log where program_id between 1 and 4000 这条SQL非常慢. 我们原以为处理记录太多的原因,所以加了id限制,一次只读五十万条记录 select * from program_access_log where id between 1 and 500000 and program_

实例讲解MySQL字符集出错的解决方法

错误如下: Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (gbk_bin,IMPLICIT) for operation '=', SQL State: HY000, Error Code: 1267 错误原因: 数据库的编码与建表时的编码不一样; 处理方法: 如果安装MySQL时设置的编码为jbk,那么在建表时可以如下处理: CREATE TABLE `teachers` ( `id` int(11) NOT NULL def

循序渐进讲解MySQL数据库性能调整

INSERT查询的速度: 插入一个记录的时间由下列组成: 连接:(3) 发送查询给服务器:(2) 分析查询:(2) 插入记录:(1 x 记录大小) 插入索引:(1 x 索引) 关闭:(1) 这里的数字有点与总体时间成正比.这不考虑打开表的初始开销(它为每个并发运行的查询做一次). 表的大小以N log N (B 树)的速度减慢索引的插入. 加快插入的一些方法: 如果你同时从同一客户插入很多行,使用多个值表的INSERT语句.这比使用分开INSERT语句快(在一些情况中几倍). 如果你从不同客户插

实例讲解MySQL联合查询

sql内联语法基础语法(inner join) SELECT * FROM 表1 inner join 表2 on 表1.userid=表2.userid sql内联语法说明:上面的语句就是查询表1和表2两个表,只要两个表中的userid字段相同的话就拼成一行显示出来. 注:以上语法同等select * from 表1,表2 where 表1.userid=表2.userid,而使用sql内联的话,将会提高很多效率. sql左联语法基础语法(left outer join) SELECT * F