- 浏览: 21371 次
- 性别:
- 来自: 深圳
文章分类
最新评论
转自 http://home.oncity.cc/home-space-uid-123570-do-blog-id-46749.html
SQL语句优化的原则(主要MySQL)
1、使用索引来更快地遍历表。
缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引 下,数据在物理上随机存放在数据页上。合理的索引设计要建立在 对各种查询的分析和预测上。一般来说:
a.有大量重复值、且经常有范围查询( > ,< ,> =,< =)和order by、group by发生的列,可考 虑建立群集索引;
b.经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
c.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。
索引虽有助于提高性能但不是索引越多越好,恰好相反过多的索引会导致系统低效。用户在表中每加进一个索引,维护索引集合就要做相应的更新工作。
2、在海量查询时尽量少用格式转换。
3、ORDER BY和GROPU BY使用ORDER BY和GROUP BY短语,任何一种索引都有助于SELECT的性能提高。
4、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
5、IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。
如果在fields1和fields2上同时建立了索引,fields1为主索引 以下sql会用到索引
select * from tablename1 where fields1=\'value1\' and fields2=\'value2\'
以下sql不会用到索引
select * from tablename1 where fields1=\'value1\' or fields2=\'value2\'
Mysql的优化原则:
1、只要能满足你的需求,应尽可能使用更小的数据类型:例如使用MEDIUMINT代替INT
2、尽量把所有的列设置为NOT NULL,如果你要保存NULL,手动去设置它,而不是把它设为默认值。
3、尽量少用VARCHAR、TEXT、BLOB类型
4、如果你的数据只有你所知的少量的几个。最好使用ENUM类型
5、正如graymice所讲的那样,建立索引。 以下是我做的一个实验,可以发现索引能极大地提高查询的效率: 我有一个会员信息表users,里边有37365条用户记录: 在不加索引的时候进行查询:
sql语句A:
select * from users where username like \'%许%\';
在Mysql-Front中的8次查询时长为:1.40,0.54,0.54,0.54,0.53,0.55,0.54 共找到960条记录
sql语句B:
select * from users where username like \'许%\';
在Mysql-Front中的8次查询时长为:0.53,0.53,0.53,0.54,0.53,0.53,0.54,0.54 共找到836条记录
sql语句C:
select * from users where username like \'%许\';
在Mysql-Front中的8次查询时长为:0.51,0.51,0.52,0.52,0.51,0.51,0.52,0.51 共找到7条记录
为username列添加索引:
create index usernameindex on users(username(6));
再次查询:
sql语句A:
select * from users where username like \'%许%\';
在Mysql-Front中的8次查询时长为:0.35,0.34,0.34,0.35,0.34,0.34,0.35,0.34 共找到960条记录
sql语句B:
select * from users where username like \'许%\';
在Mysql-Front中的8次查询时长为:0.06,0.07,0.07,0.07,0.07,0.07,0.06,0.06 共找到836条记录
sql语句C:
select * from users where username like \'%许\';
在Mysql-Front中的8次查询时长为:0.32,0.31,0.31,0.32,0.31,0.32,0.31,0.31 共找到7条记录
在实验过程中,我没有另开任何程序,以上的数据说明在单表查询中,建立索引的可以极大地提高查询速度。 另外要说的是如果建立了索引,对于like \'许%\'类型的查询,速度提升是最明显的。因此,我们在写sql语句的时候也尽量采用这种方式查询。
对于多表查询我们的优化原则是:尽量将索引建立在:left join on/right join on ... +条件,的条件语句中所涉及的字段上。 多表查询比单表查询更能体现索引的优势。
6、索引的建立原则:
如果一列的中数据的前缀重复值很少,我们最好就只索引这个前缀。Mysql支持这种索引。我在上面用到的索引方法就是对username最左边的6个字符进行索引。索引越短,占用的 磁盘空间越少,在检索过程中花的时间也越少。这方法可以对最多左255个字符进行索引。 在很多场合,我们可以给建立多列数据建立索引。 索引应该建立在查询条件中进行比较的字段上,而不是建立在我们要找出来并且显示的字段上。
发表评论
-
wabacus学习体会二
2012-09-26 12:09 975采用控制列编辑方式生成可编辑自动列表报表时,需要把 ... -
JNDI全面总结 (tomact中配置连接池)
2012-09-24 13:09 1406转发 http://yunqiang-zhang- ... -
wabacus 学习体会一
2012-08-20 16:21 1137采用<report type ="form&q ... -
SQL完成交叉表功能
2012-08-08 09:38 2052SQL完成交叉表功能 转自http://www.2cto. ... -
Eclipse的Tomcat插件安装
2012-08-06 15:55 841Eclipse的Tomcat插件安装[ ... -
如何禁止windows xp和2003使用F8进入安全模式
2012-08-06 15:27 1470如何禁止window ... -
OFBiz的主要配置文件说明——ofbiz-component.xml
2012-07-18 17:45 1060OFBiz的主要配置文件说明——ofbiz-component ... -
OFBiz之Component与Application
2012-07-18 17:38 794OFBiz之Component与Application ... -
OFBiz的主要配置文件说明——component-load.xml
2012-07-18 17:25 955OFBiz的主要配置文件说明——component-lo ... -
Ofbiz基本结构
2012-07-18 17:11 958OFBiz是一个非常著名的电子商务平台,是一个 ... -
MVC已过时,MOVE时代来临?
2012-07-17 22:19 726转自:http://sd.csdn.net/a/201 ... -
只需一条语句即可记住所有的ORACLE的系统表
2012-08-06 15:31 663转自:http://wulinhaoxia5.ite ... -
VMWare虚拟机优化十招
2012-07-16 16:35 1338转自 http://virtual.51cto.com/art ... -
OFBIZ10.04开发环境搭建
2012-07-16 00:23 1044转自 http://www.haogongju.net/art ... -
软件产品的演示技巧
2010-03-31 15:49 632软件产品的演示技巧 -- ... -
sql语句优化
2012-07-15 23:58 682sql语句优化 总结1 选择索引 ... -
优化数据库的方法及SQL语句优化的原则
2012-07-15 23:47 691转自 硅谷动力 http://www.enet.com.cn/ ...
相关推荐
本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...
尽管如此,我将基于标题和描述中提供的关键词“Effective MySQL之SQL语句最优化”来构建知识点。 1. SQL语句最优化的概念:在数据库管理中,对SQL语句进行优化是提高数据库性能的关键环节。最优化的SQL语句能够在...
sql语句优化.chmmssql优化 mysql优化 oracle优化
《Effective MySQL之SQL语句最优化》主要内容: ●找出收集和诊断问题必备的分析命令; ●创建MySQL索引来改进查询性能; ●掌握MySQL的查询执行计划; ●找出影响查询执行和性能的关键配置变量; ●用...
### MySQL优化之SQL语句与索引优化 #### 数据库设计合理性 在MySQL数据库的优化过程中,合理设计数据库(表)至关重要。一个合理的数据库设计能够有效地提高查询性能、减少数据冗余并确保数据完整性。 - **3NF**...
《Effective MySQL之SQL语句最优化》是一本深入探讨如何提升数据库性能的专业手册,它针对SQL语句的优化提供了一系列实用且高效的策略。在数据库管理领域,SQL优化是提升系统性能的关键环节,尤其是在处理大数据量时...
以下是十个 SQL 语句优化技巧来提升 MYSQL 查询效率: 1. 优化 MySQL 查询缓存 MySQL 查询缓存可以启用高速查询缓存,让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一。当同一个查询被执行多次时,如果...
标题 "PB 从SQL语句获取数据存储(MySQL)" 指的是使用PowerBuilder (PB) 开发工具,通过SQL语句从MySQL数据库中检索和处理数据存储的过程。在这个Demo中,PB11.5 版本被用作开发环境,而MySQL作为后台数据库系统。...
《Effective MySQL之SQL语句最优化》是一本深入探讨如何提升数据库性能,特别是针对SQL查询进行优化的专业书籍。在数据库管理中,SQL语句的优化是至关重要的,它直接影响到系统的响应速度和整体效率。本篇文章将依据...
通过配置MySQL的日志设置,我们可以记录下执行时间超过指定阈值的SQL语句,进而对其进行优化。 1. **配置MySQL慢查询日志** - 打开MySQL的配置文件`my.ini`。 - 设置慢查询日志的开启状态:`slow-query-log=1` ...
SQL 查询优化(提高 MySQL 数据库查询效率的几个技巧) 在 MySQL 数据库中,查询优化是一个非常重要的方面。在实际应用中,高效的查询可以提高整个系统的性能和响应速度。下面我们将介绍几个提高 MySQL 数据库查询...
"Effective MySQL之SQL语句最优化"这本书深入探讨了如何通过优化SQL查询来提高MySQL数据库的效率。以下是基于这个主题的一些关键知识点: 1. **索引优化**:索引是数据库性能提升的核心。书中的内容可能涵盖如何...
本文将深入探讨优化数据库的思想以及SQL语句优化的原则。 一、优化数据库的思想 1. 数据库设计:良好的数据库设计是优化的基础。应遵循第一范式(1NF)、第二范式(2NF)和第三范式(3NF),减少冗余数据,确保...
Python 使用 SQL 语句对 MySQL 数据库多条件模糊查询 Python 是一种广泛使用的编程语言,而 MySQL 是一种常用的关系型数据库管理系统。在实际应用中,我们经常需要使用 Python 连接 MySQL 数据库,并执行多条件...
执行计划可以帮助我们了解SQL语句的执行过程,从而对其进行优化。执行计划可以通过EXPLAIN语句来查看。 二、SELECT语句优化 SELECT语句是MySQL数据库中最常用的语句之一。SELECT语句的优化是非常重要的。通过优化...
2. 转换规则应用:根据SQL Server的语法特性,工具会将MySQL的SQL语句转化为相应的SQL Server语法。 3. 数据导出:将MySQL中的数据导出为SQL脚本,或者直接导入到SQL Server中。 4. 验证与调整:迁移后,需要验证...
5. **使用`EXPLAIN`分析查询**:`EXPLAIN`可以显示MySQL如何执行SQL语句,帮助理解并优化查询计划。 6. **批量插入**:一次性插入大量数据比单条插入更高效。 7. **存储过程和预编译语句**:它们可以减少网络传输...
《EffectiveMySQL之SQL语句最优化》提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。《EffectiveMySQL之SQL语句最优化》希望能够通过一步步详细介绍SQL优化的方法,帮助...
MySQL常用SQL语句 MySQL是一种关系型数据库管理系统,使用SQL(Structured Query Language)语言来管理和操作数据库。下面是MySQL中一些常用的SQL语句: 创建、删除和基本查询 * 显示数据库:`show databases;` *...
"Oracle数据库sql转换mysql数据库工具" 提供了解决这一问题的解决方案,允许用户将Oracle数据库中的SQL语句或数据结构转换为MySQL兼容的格式。 在数据库迁移过程中,这样的工具至关重要,因为它可以简化工作流程,...