下载此文档

Sql查询语句优化心得MySQL优化.doc


文档分类:IT计算机 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
Sql查询语句优化心得MySQL优化.docSql查询语句优化心得MySQL优化
2010-12-24 14:31
作为一个互联网开发工程师,数据库的知识是必不可少的,要是写几条查询效率很差的SQL, 当数据库的数据到达一定级別以后,没几个人同时访问你的网站,就能把你的一台服务器 高挂啦!【个人认为:最为简单的测试方法就是把SQL语句在命令行下运行,若査询的语句 化。】
如下的大多都来自网络:终归起来、都是一些简单SQL优化,不敢保证这说法绝对的权威 哦。phpma
1、 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数, 尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处 理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列; 算法的结构尽量简单;在查询时,不要过多地使用通配符如SELECT* FROM T1语句,要 用到几列就选择几列如:SELECT COL1,COL2 FROM T1:在可能的情况下尽量限制尽量结 果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROMT1,因为某些情况下用户是不需要 那么多的数据的。不要在应用小使用数据库游标,游标是非常有用的工具,但比使用常规的、 面向集的SQL语句需要更大的开销;按照特定顺序提取数据的查找。
2、 避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不 兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如: SELECT name FROM employee WHERE salary > 60000
在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型 数。我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。
3、 尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索 引而进行全表扫描。女口:
SELECT * FROM T1 WHERE Fl/2=100 应改为:SELECT * FROM T1 WHERE Fl二 100*2
SELECT * FROM RECORD WHERE SUBSTRING(CARD_NO,1,4)=' 5378'应改为:SELECT
* FROM RECORD WHERE CARD NO LIKE ' 5378%'
SELECT member_n umber, first_name, last_name FROM members WHERE DATEDIFF(yy,datofbirth,GETDAT玖))> 21 应改为:SELECT member_number, first_name, last_name FROM members WHERE dateofbirth < DATEADD(yy,-21 ,GETDATE())
即:任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可 能将操作移至等号右边。
4、避免使用!=或< >、IS NULL或IS NOT NULL、IN , NOTIN等这样的操作符,因为这 会使系统无法使用索引,而只能直接搜索表中的数据。例如:SELECT id FROM employee WHERE id != ”B%“优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所 有行。
5、 尽量使用数字型字段,一部分开发人员和数据库管理人员喜欢把包含数值信息的字段 设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询 和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
6、 合理使用EXISTS,NOT EXISTS子句。如下所示:
SUM()FROM T1 WHERE(SELECT COUNT(*)FROM T2 WHERE =>0)
SUM() FROM T1 WHERE EXISTS(SELECT * FROM T2 WHERE =)
两者产生相同的结果,但是后者的效率显然要高于前者。因为后者不会产生大量锁定的表扫 描或是索引扫描。如果你想校验表里是否存在某条纪录,不要用count(*)那样效率很低,而 且浪费服务器资源。可以用EXISTS代替。如:
IF (SELECT COUNT(*) FROM table_name WHERE column_name = 'xxx')可以写成:IF EXISTS (SELEC

Sql查询语句优化心得MySQL优化 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人sssmppp
  • 文件大小62 KB
  • 时间2020-12-05
最近更新