`

数据库优化之:MySQL查询优化

 
阅读更多

http://zj86.info/?post=133

我们应该考虑哪些因素能影响到查询优化?可以分为:机器硬件、索引、系统参数、查询技巧等。对于一个查询优化问题,我们应该首先考虑哪各方面呢?索引的使用应该再考虑的首条,毋庸置疑的是,在没有使用索引的前提下,想用其它招数来大幅度改善性能的做法往往收获甚微,纯粹是在浪费时间,可事实无绝对,有些场合反而需要去抑制优化程序的行为。

        我们先来说说索引。索引能提高查询效率的原因之一是它可以让我们知道最后一个符合条件的数据行出现在什么位置,此后的数据行都用不着在检查了,另一个原因是人们已经发明了很多中定位算法来迅速查出第一个符合条件的数据行出现在什么位置,用不着从索引的开头通过线性扫描法去定位一个匹配项。

        MySQL在建立索引时,对不同的数据表有不同的细节:MyISAM数据表,数据行将被保存在数据文件里,其索引值将被保存在索引文件里,而BDB处理程序把同一个BDB数据表的数据值和索引值保存在同一个文件里,InnoDB处理程序则是把所有InnoDB数据表的数据值和索引值都保存在同一个表空间里。这些看似与建立索引无关,其实是很重要的,待会我后说道。还有,索引不仅能给单据表带来好处,然而,索引给涉及多个数据表的关联查询带来的好处就更打了。

        建立索引也要考虑它的缺点

        首先,索引需要消耗磁盘空间(现在磁盘已经很便宜了),索引越多,消耗的空间也就有多。对于MyISAM数据表,过多的索引会使索引文件优先与数据文件达到尺寸上限。对于BDB数据表,因为它把数据值和索引值都保存在同一个文件里,所以增加索引必然会使他更快地达到BDB数据文件的尺寸上限。InnoDB数据表共同分享着InnoDB表空间里的存储空间,所以增加索引必然会加快InnoDB表空间的消耗速度。不过,只要还能增加磁盘空间,就能通过给InnoDB表空间增加组件的办法扩充之。

        其次,索引过多,会减慢被索引的数据列上的插入、删除和修改操作的速度。因为在写入记录时,MySQL还必须修改与之有关的所有索引。

        下面我们考虑应该选择什么样的数据列来创建索引?怎样才能创建出最使用的索引?怎样处理数据类型给索引带来的影响?原则是:

1、 引应该创建在搜索、排序、归组等操作所涉及的数据列上,只在输出报告里出现的数据列不是好的候选。

2、 尽量使用唯一化索引。因为如果数据列里有很多彼此重复的值,建立在其上的索引就不会有好的效果。

3、 尽量对比较短的值进行索引。

4、 对于复合索引,MySQL会先匹配它的第一个索引列,如果匹配不上它就不会使用这个索引了。

5、 不要建立过多的索引。

6、 考虑将在这个数据列上进行怎样的比较操作。对于HEAP数据表来说,它只会用“=”来比较,其他比较操作就帮不上忙了。

7、 利用慢查询日志来找出那些性能低劣的查询。不过不要认为这是绝对的,因为MySQL会将凡是没使用索引的查询一并写入这个日志里,要有选择的查看这个日志哦。

8、 要尽量把数据列声明为NOT NULL,这样可以排除在对空值的查询,在有些时候,能起到很大的作用。

9、 对于字符串数据列,如果其取值是有限的,应优先考虑使用ENUM类型,因为MySQL是用处理数值型的方法来处理这种字符串的,速度比处理字符串要快得多。

10、 对于那些声明为可变长度的数据列(如varchar型),时间长了会使得数据表出现很多碎片,减慢查询效率,我们可以用OPTIMIZE TABLE语句对之进行整理。

11、 将数据压缩到BLOB数据列里,就能只通过一次性查询找到数据,或者把BLOB数据列单独存入一个文件。

12、 有时我们可以人为的为一个数据表建立索引,然后查询这个索引达到快速查询的目的。例如:我们先给一个数据表再建一个数据列,根据数据表里其他数据列计算出一个散列值并保存到刚建的数据列里,这样就可以通过搜索散列值的方法去检索想要找到数据行。

        MySQL查询优化程序是尽可能的使用索引,而且是尽可能地使用那些最为挑剔的索引,以便尽可能多和尽可能快的排除那些不符合查询条件的数据行。可以依照以下原则帮助优化程序:

1. 尽量对同类型的数据列进行比较,必要时可以先用ALTER TABLE语句把其中之一的类型修改为与另一个数据列相同。

2. 尽量让已经索引的数据列在比较表达式中单独出现。

3. 尽量减轻模糊匹配查询,例如:不要在LIKE模式的开头使用通配符等。

4. 多试几种查询命令。

5. 不要滥用MySQL的类型自动转换功能,如:数字3就不能写成字符‘3’,加重MySQL的类型转换,会使它的性能下降。


        下面说说加载数据

        加载数据时要采用批量加载,尽量减少MySQL对索引的刷新率,例如:LOAD DATA 语句要比INSERT 语句效率高,如果必须使用INSERT 语句,请尽量使他们集中在一起,减少对索引的刷新次数。对于支持事务处理机制的数据表类型,应该把这些INSERT 语句放在同一个事务里,对于不支持事务处理机制的数据表类型,应该现对数据表进行写锁定,然后在数据表锁定期间发出这些INSERT语句。对于大量数据,可以先加载数据在建立索引。

        在机器硬件方面

1. 应为机器安装更多内存。

2. 购置高速磁盘以缩短I/O等待时间。

3. 使用多个物理硬盘,提高并行操作能力。

4. 使用多个处理器。

在一个具体的数据库应用系统中,要根据实际需要来采用各种优化策略,以便使顾客与公司达到双赢的目的。

分享到:
评论

相关推荐

    sql查询优化(提高MySQL数据库查询效率的几个技巧)

    SQL 查询优化(提高 MySQL 数据库查询效率的几个技巧) 在 MySQL 数据库中,查询优化是一个非常重要的方面。在实际应用中,高效的查询可以提高整个系统的性能和响应速度。下面我们将介绍几个提高 MySQL 数据库查询...

    MySQL数据库设计与优化实战:提升查询性能与系统稳定性

    内容概要:本文详细介绍了 MySQL 数据库设计与优化的最佳实践,包括数据库设计的基础原则、索引设计、数据库分区与分库分表、查询优化技巧以及性能调优与监控。通过合理的设计和优化,可以帮助开发者提升 MySQL ...

    MySQL数据库查询优化

    课程大纲: 第1课 数据库与关系代数 综述数据库、关系代数、查询优化技术 综述数据库调优技术 预计时间1小时 第2课 数据库查询优化技术总揽 ...真正认识、掌握MySQL的查询优化技术,大步流星步入查询优化的高手之列。

    基于MySQL数据库的查询性能优化研究.pdf

    MySQL 数据库是当前网络环境中最流行的开源关系型数据库之一,随着网络环境中数据总量的急剧攀升,对数据库查询的响应时间提出了更严格的要求。为了提高查询效率,需要研究 MySQL 数据库的查询性能优化。 本文主要...

    千金良方:MySQL性能优化金字塔法则.docx

    MySQL性能优化是指通过调整MySQL数据库的配置、优化数据库结构和查询语句等方式,提高MySQL数据库的性能和响应速度,以满足应用程序的需求。MySQL作为最流行的开源数据库之一,被广泛应用于各种规模的企业和应用程序...

    mysql数据库优化方案(值得学习)

    简单描述数据库优化方案,以及数据库一些常用的操作,包括一些简单的查询语句,函数使用,合适学习mysql的读者。 简单描述数据库优化方案,以及数据库一些常用的操作,包括一些简单的查询语句,函数使用,合适学习...

    数据库管理与优化:MySQL从入门到精通的实战指南

    使用场景及目标:通过阅读本文档,可以帮助读者快速上手 MySQL 数据库的基础配置、熟练掌握各种 SQL 命令的正确使用方法及其背后的工作原理,进而具备解决复杂业务逻辑下数据管理和性能优化的能力。 其他说明:推荐...

    mysql数据库优化的学习心得

    本文总结了一些 MySQL 数据库优化技巧,包括选择合适的字段属性、使用连接(JOIN)代替子查询、使用联合(UNION)代替手动创建的临时表、事务、锁定表、外键等。 一、选择合适的字段属性 在创建 MySQL 数据库时,...

    MySQL数据库优化

    MySQL数据库优化MySQL数据库优化MySQL数据库优化MySQL数据库优化

    基于MySQL的数据库查询性能优化.pdf

    "基于MySQL的数据库查询性能优化" 在当前的Web应用开发中,数据库的查询操作已经成为整个应用的性能瓶颈, especialmente 对于使用 MySQL 的 Web 应用。因此,数据库查询性能的优化已经成为一个非常重要的课题。...

    数据库技术:MySQL 4.1

    1. **查询优化器改进**:MySQL 4.1对查询优化器进行了优化,能够更好地分析和选择执行计划,从而提升查询效率。新的优化器支持更多的复杂查询模式,包括子查询和连接操作。 2. **存储引擎更新**:在4.1版本中,...

    mysql数据库优化(全)

    ### MySQL数据库优化全面解析 #### 一、查询优化概述 查询优化是提升MySQL数据库性能的关键环节之一。在数据库系统中,查询操作是最常见的用户交互形式。一个查询从客户端发起,到达数据库服务器,经过处理后返回...

    MySQL数据库优化SQL篇PPT课件.pptx

    MySQL数据库优化SQL篇PPT课件.pptx 本PPT课件主要讲述了MySQL数据库优化的重要知识点,特别是SQL优化方面的内容。从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和...

    mysql数据库性能优化

    MySQL作为一款广泛使用的开源关系型数据库管理系统,其性能优化是提升系统整体效率的关键环节之一。本文将围绕《构建高性能Web站点》一书中有关MySQL性能优化的部分内容进行详细解读,帮助读者更好地理解和掌握MySQL...

    MySql数据库性能优化

    MySql数据库性能优化是指通过调整和优化数据库的各种参数、结构和查询语句,提高数据库的运行速度和效率,减少资源占用和系统瓶颈。下面将详细介绍MySql数据库性能优化的相关知识点。 什么是优化? 优化是指通过...

    Mysql数据库与SQL优化+集群+负载均衡.doc

    1. 数据库结构优化:数据库结构的设计对数据库性能有着至关重要的影响。合理的数据库结构可以提高查询速度、减少磁盘空间占用和提高数据安全性。常见的数据库结构优化方法包括: Normalize、Denormalize、 vertical ...

    国家开放大学 数据库运维 形考一 MySQL数据库服务器配置

    MySQL 服务器的配置方法包括启动和停止 MySQL 服务器、连接到 MySQL 服务器、查看错误日志文件、启用二进制日志、慢查询日志和通用查询日志、关闭二进制日志、慢查询日志和通用查询日志、创建数据库、查看系统状态...

    Navicat连接MySQL数据库全攻略:配置、优化与故障排查

    本文将详细介绍如何配置Navicat连接到MySQL数据库,包括基本配置、连接优化以及故障排查。 Navicat是一个可多重连接的数据库管理工具,允许用户从单一应用程序同时连接到MySQL、MariaDB、MongoDB、SQL Server、...

    数据库索引设计与优化.pdf

    豆瓣8.4分,数据库索引设计必读的好书。 高清扫描版,带完整章节书签(不是网上常见的页码书签的版本!!!!)

    深入浅出MySQL数据库开发、优化与管理维护.doc

    在本篇中,我们将学习 MySQL 数据库优化的知识点,包括查询优化、索引优化、存储优化和服务器优化等。 管理维护篇 在本篇中,我们将学习 MySQL 数据库管理维护的知识点,包括数据库备份、数据库恢复、服务器监控和...

Global site tag (gtag.js) - Google Analytics