- 浏览: 219628 次
- 来自: ...
文章分类
- 全部博客 (80)
- 设计架构 (9)
- Javascript,Css (2)
- JVM (7)
- Swing,Applet (1)
- 图像处理 (5)
- Java本地方法 (1)
- 项目管理 (6)
- WEB服务器 (5)
- 数据库 (22)
- linux,unix (2)
- Java collection framework (2)
- safe (0)
- WEB (4)
- HTTP长连接 (1)
- Javascript (6)
- Css (5)
- HTML (1)
- Hibernate (2)
- Spring (0)
- Struts (0)
- NOSQL (0)
- Ibatis (0)
- Core Java (1)
- UI (1)
- dhkchkconfig--- (0)
最新评论
-
ietttt:
楼主方便给个QQ吗?遇到紧急问题想请教楼主。
Java操作visio文档 -
davidtps:
学习了
比较一下ArrayList和LinkedList: -
mousepc:
不错的文章,谢谢!
比较一下ArrayList和LinkedList: -
lliiqiang:
相应的jar包呢
Java操作visio文档 -
pangtao:
分析的很到位,谢谢
比较一下ArrayList和LinkedList:
我们应该考虑哪些因素能影响到查询优化?可以分为:机器硬件、索引、系统参数、查询技巧等。对于一个查询优化问题,我们应该首先考虑哪各方面呢?索引的使用应该再考虑的首条,毋庸置疑的是,在没有使用索引的前提下,想用其它招数来大幅度改善性能的做法往往收获甚微,纯粹是在浪费时间,可事实无绝对,有些场合反而需要去抑制优化程序的行为。
我们先来说说索引。索引能提高查询效率的原因之一是它可以让我们知道最后一个符合条件的数据行出现在什么位置,此后的数据行都用不着在检查了,另一个原因是人们已经发明了很多中定位算法来迅速查出第一个符合条件的数据行出现在什么位置,用不着从索引的开头通过线性扫描法去定位一个匹配项。
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. 使用多个处理器。
在一个具体的数据库应用系统中,要根据实际需要来采用各种优化策略,以便使顾客与公司达到双赢的目的。
发表评论
-
Can’t connect to local MySQL server through socket 解决办法
2012-06-14 20:56 1012启动mysql 报错: ERROR 2002 (HY0 ... -
PLSQL 查询不出中文问题
2012-06-14 14:17 2737我的操作系统是英文版的,oracle是中文版的,在PL ... -
inux系统上安装MySQL 5.5prm
2012-06-09 22:47 848http://www.cnblogs.com/sunson/a ... -
mysql优化配置参数
2012-05-31 11:04 861http://www.jb51.net/article/264 ... -
HBase 云计算的分布式数据库
2012-05-21 10:55 0http://wenku.baidu.com/view/524 ... -
hibernate的坏处
2012-05-20 12:48 0我平常做金融类产品居多,深知这个东西的害处。onecan说的对 ... -
Dbutils
2012-05-20 12:19 1047Common Dbutils是操作数据库的组件,对传统操作数据 ... -
Mysql数据库服务器性能配置优化一 -- 硬件配置及优化,RAID优化
2012-05-18 17:46 2078近期公司采购了 ... -
RAID 5 and MySQL is NOT recommended
2012-05-18 17:37 937http://www.razzed.com/2009/01/1 ... -
临时表作用
2012-05-04 15:45 10041.事务处理的中间数据,回滚 2.分析数据中间数据 3.复 ... -
临时表在不同数据库设计中的作用
2012-05-04 15:35 3247在以前数据库 ... -
Oracle Apex
2012-04-30 10:59 753http://wenku.baidu.com/view/f83 ... -
XA Datasource 与 Non-XA Datasource 区别
2012-04-27 14:29 2513An XA transaction, in the mos ... -
JDBC事务和JTA (XA)事务
2012-04-27 14:28 2521事务简介 一般情况下,J2EE应用服务器支持JDBC事务、J ... -
Spring事务的传播行为
2012-04-27 11:34 961在service类前加上@Transa ... -
什么是事务的传播特性?
2012-04-27 11:33 3357我们都知道事务的概 ... -
数据库事务隔离级别与锁
2012-04-27 11:19 1905数据库事务隔离级别 ... -
索引与散列
2012-04-18 22:30 879http://wenku.baidu.com/view/3c8 ... -
数据库集群技术分析和比较
2012-04-18 22:15 760http://www.51cto.com/art/200607 ... -
横向比较数据库中不同的索引机制
2012-04-18 20:07 993http://database.51cto.com/art/2 ...
相关推荐
一共48页,写的还是非常好。 MySQL数据库优化(一) 1 MySQL数据库优化(二) 5 MySQL数据库优化(三) 13...MySQL数据库优化(十):优化MySQL服务器 40 MySQL数据库优化(十一) 45 MySQL数据库优化(十二):磁盘 48
课程大纲: 第1课 数据库与关系代数 综述数据库、关系代数、查询优化技术 综述数据库调优技术 预计时间1小时 第2课 数据库查询优化技术总揽 ...真正认识、掌握MySQL的查询优化技术,大步流星步入查询优化的高手之列。
sql查询优化 提高MySQL数据库查询效率的几个技巧
简单描述数据库优化方案,以及数据库一些常用的操作,包括一些简单的查询语句,函数使用,合适学习mysql的读者。 简单描述数据库优化方案,以及数据库一些常用的操作,包括一些简单的查询语句,函数使用,合适学习...
基于MySQL的数据库查询性能优化.pdf基于MySQL的数据库查询性能优化.pdf基于MySQL的数据库查询性能优化.pdf基于MySQL的数据库查询性能优化.pdf基于MySQL的数据库查询性能优化.pdf基于MySQL的数据库查询性能优化.pdf...
MySQL数据库优化心得:选取最适用的字段属性;使用连接(JOIN)来代替子查询(Sub-Queries);使用联合(UNION)来代替手动创建的临时表;事务;锁定表;外键等。
MySQL数据库设计、优化 叶金荣 微博: @yejinrong 微信公众号: MySQL中文网 QQ群: 125572178、272675472 2013.08.20 MySQL数据库设计、优化全文共24页,当前为第1页。 提纲 规范 基础规范 命名规范 库表规范 字段...
● 本书中的更新还表现为使用MySQL Workbench作为MySQL 5.1的唯一数据库开发工具。本书第4版使用的MySQL GUI工具被MySQL在2009年12月18日宣布停止使用。目前的MySQL Workbench 5.2.x集成了MySQL GUI工具的功能,这一...
豆瓣8.4分,数据库索引设计必读的好书。 高清扫描版,带完整章节书签(不是网上常见的页码书签的版本!!!!)
MySQL数据库优化SQL篇.ppt,适用于企业级项目开发
性能良好:MySQL以其高性能而闻名,能够快速响应查询请求,并支持高效的索引和优化器,确保数据检索和操作的效率。 易用性:MySQL易于安装和配置,并且拥有强大的SQL语言支持,使得开发人员可以轻松地进行数据库...
对mysql数据库优化方面的全面解析,尽大程度的提高性能
MySQL数据库:项目优化查询学生信息管理数据库.pptx
MYSQL数据库优化.pdf saivicky出品,必属精品!
本文首先阐述了索引在数据库查询优化中的重要作用,然后详细介绍了在MySQL中如何利用各种索引技术来帮助查询优化器生成更高效的执行计划,以提升查询性能,包括对查询列建索引、预定义索引列、使用索引提示、调整索引...
mysql数据库优化
数据库课程设计 摘要:本文介绍了数据库课程设计的重要性以及如何进行实战数据库系统...同时,他们还需要学会使用数据库管理系统(例如MySQL、Oracle等),进行数据库的创建、修改和维护。 2.2 将理论知识应用于实践
主要介绍MySQL数据库中慢查询日志的使用流程、使用方式、以及日志分析工具mysqldumpslow的相关内容