`

如何提高数据库查询速度

阅读更多

1、用程序中,
保证在实现功能的基础上,尽量减少对数据库的访问次数;
通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;
能够分开的操作尽量分开处理,提高每次的响应速度;
在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;
算法的结构尽量简单;
在查询时,不要过多地使用通配符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1;
在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因为某些情况下用户是不需要那么多的数据的。
不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开销;
按照特定顺序提取数据的查找。

 

2、避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。
数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如:
SELECT name FROM employee WHERE salary > 60000
在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型数。
我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。

 

3、尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
SELECT * FROM T1 WHERE F1/2=100
应改为:
SELECT * FROM T1 WHERE F1=100*2

SELECT * FROM RECORD WHERE SUBSTRING(CARD_NO,1,4)=’5378’
应改为:
SELECT * FROM RECORD WHERE CARD_NO LIKE ‘5378%’

SELECT member_number, first_name, last_name   FROM members
WHERE DATEDIFF(yy,datofbirth,GETDATE()) > 21
应改为:
SELECT member_number, first_name, last_name   FROM members
WHERE dateofbirth < DATEADD(yy,-21,GETDATE())
即:任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。

 

4、避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的操作符,
因为这会使系统无法使用索引,而只能直接搜索表中的数据。例如:
SELECT id FROM employee WHERE id != 'B%'
优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。

 

5、尽量使用数字型字段,一部分开发人员和数据库管理人员喜欢把包含数值信息的字段设计为字符型,
这会降低查询和连接的性能,并会增加存储开销。
这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

 

6、合理使用EXISTS,NOT EXISTS子句。如下所示:
1.SELECT SUM(T1.C1)FROM T1 WHERE(
(SELECT COUNT(*)FROM T2 WHERE T2.C2=T1.C2>0)
2.SELECT SUM(T1.C1) FROM T1WHERE EXISTS(
   SELECT * FROM T2 WHERE T2.C2=T1.C2)
两者产生相同的结果,但是后者的效率显然要高于前者。因为后者不会产生大量锁定的表扫描或是索引扫描。
如果你想校验表里是否存在某条纪录,不要用count(*)那样效率很低,而且浪费服务器资源。可以用EXISTS代替。如:
IF (SELECT COUNT(*) FROM table_name WHERE column_name = 'xxx')
可以写成:
IF EXISTS (SELECT * FROM table_name WHERE column_name = 'xxx')

经常需要写一个T_SQL语句比较一个父结果集和子结果集,从而找到是否存在在父结果集中有而在子结果集中没有的记录,如:
1.SELECT a.hdr_key   FROM hdr_tbl a---- tbl a 表示tbl用别名a代替
WHERE NOT EXISTS (SELECT * FROM dtl_tbl b WHERE a.hdr_key = b.hdr_key)

2.SELECT a.hdr_key   FROM hdr_tbl a
LEFT JOIN dtl_tbl b ON a.hdr_key = b.hdr_key   WHERE b.hdr_key IS NULL

3.SELECT hdr_key   FROM hdr_tbl
WHERE hdr_key NOT IN (SELECT hdr_key FROM dtl_tbl)
三种写法都可以得到同样正确的结果,但是效率依次降低。

 

7、尽量避免在索引过的字符数据中,使用非打头字母搜索。这也使得引擎无法利用索引。 
见如下例子:
SELECT * FROM T1 WHERE NAME LIKE ‘%L%’
SELECT * FROM T1 WHERE SUBSTING(NAME,2,1)=’L’
SELECT * FROM T1 WHERE NAME LIKE ‘L%’
即使NAME字段建有索引,前两个查询依然无法利用索引完成加快操作,引擎不得不对全表所有数据逐条操作来完成任务。
而第三个查询能够使用索引来加快操作。

 

8、充分利用连接条件,在某种情况下,两个表之间可能不只一个的连接条件,
这时在   WHERE 子句中将连接条件完整的写上,有可能大大提高查询速度。例:
SELECT SUM(A.AMOUNT) FROM ACCOUNT A,CARD B WHERE A.CARD_NO = B.CARD_NO
SELECT SUM(A.AMOUNT) FROM ACCOUNT A,CARD B WHERE A.CARD_NO = B.CARD_NO   AND A.ACCOUNT_NO=B.ACCOUNT_NO
第二句将比第一句执行快得多。

 

9、消除对大型表行数据的顺序存取,尽管在所有的检查列上都有索引,但某些形式的WHERE子句强迫优化器使用顺序存取。如:
SELECT * FROM orders WHERE (customer_num=104   AND order_num>1001) OR order_num=1008
解决办法可以使用并集来避免顺序存取:
SELECT * FROM orders WHERE customer_num=104 AND order_num>1001
UNION
SELECT * FROM orders WHERE order_num=1008
这样就能利用索引路径处理查询。

 

10、避免困难的正规表达式。LIKE关键字支持通配符匹配,技术

分享到:
评论

相关推荐

    怎样提高数据库查询效率

    提高数据库查询效率可以大大提高应用程序的响应速度和用户体验。本文总结了15条提高数据库查询效率的技巧,涵盖了查询优化、索引使用、where 子句使用、函数和算术运算、索引字段使用等方面的知识点。 1. 对查询...

    高级MySQL笔记时,需要深入了解数据库的内部机制和优化技巧,以提高数据库性能和效率

    索引优化:索引是提高数据库查询速度的重要工具。可以通过分析查询语句和表结构,合理地设计和使用索引,避免全表扫描,提高查询效率。查询优化:通过合理设计查询语句、使用合适的索引、避免使用不必要的函数和操作...

    数据库查询数据库查询数据库查询

    - **优化索引设计**:合理创建索引可以显著提高查询速度。例如,在经常作为查询条件的字段上建立索引。 - **使用高效的查询语句**:避免使用过多的子查询或嵌套查询,减少不必要的数据处理步骤。 #### 4. 数据库...

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

    通过大量的实验测试,我们发现,适当的数据表索引、SQL 查询语句中的 "limit" 和 "*" 优化、id 限定分页查询和查询缓存技术可以大大提高数据库的响应速度。 结论 本文总结了数据库查询性能优化的重要性和影响...

    数据库查询速度优化 建立索引

    "数据库查询速度优化 建立索引" 数据库查询速度优化是数据库管理中非常重要的一方面。快速的查询速度可以提高用户体验,提高...选择合适的索引类型和建立索引可以大大提高数据库的查询速度,从而提高系统的整体性能。

    数据库系统工程师资料..doc

    数据库索引是指提高数据库查询速度的数据结构。常见的数据库索引包括B-tree索引、Hash索引、Full-text索引等。 十二、数据库视图 数据库视图是指从数据库中抽取的虚拟表格。视图可以简化数据查询和操作,提高...

    提高ORACLE数据库的查询统计速度

    ### 提高Oracle数据库的查询统计速度 在现代企业级应用中,Oracle数据库因其稳定性和强大的功能而被广泛采用。然而,在处理大量数据时,如何优化查询统计速度成为了提高整体系统性能的关键因素之一。本文将围绕如何...

    南京理工大学数据库课件

    索引是提高数据库查询速度的重要手段,通过预建的数据结构(如B树或哈希索引)加速查找过程。查询优化是数据库系统的核心功能,课程会介绍如何分析查询执行计划,理解优化器的工作原理,并学习编写高效的SQL查询。 ...

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

    在实际应用中,高效的查询可以提高整个系统的性能和响应速度。下面我们将介绍几个提高 MySQL 数据库查询效率的技巧。 使用 Statement 进行绑定查询 使用 Statement 可以提前构建查询语法树,在查询时不再需要构建...

    提高Oracle数据库查询统计速度

    大型数据库系统中往往要用到查询统计,但是对于数据量大的系统,用户在进行复杂的查询统计时往往感到速度很慢,不能满足应用要求,这就要求我们在设计数据库系统时进行合理设置,提高查询统计的速度。本文结合笔者的...

    《数据库原理》完整版

    6. **索引**:索引是提高数据库查询速度的重要手段,它创建了指向数据的指针,使查询过程更快。B树和B+树是常见的索引结构,适用于大量数据的快速查找。 7. **事务与并发控制**:事务是数据库操作的基本单元,具有...

    数据库课件(对学习数据库知识很有用处)

    索引是提高数据库查询速度的关键,包括B树、B+树等数据结构在索引中的应用,以及唯一索引、复合索引、全文索引等不同类型的索引。同时,索引的创建和维护对数据库性能的影响也是学习的重点。 安全性与权限管理是...

    数据库课件 及课后答案

    4. **索引与查询优化**:索引是提高数据库查询速度的关键工具。学习者将了解B树、B+树等索引结构,以及如何创建和管理索引。同时,课程可能包括查询优化器的工作原理,它是如何选择最佳执行计划的。 5. **事务处理...

    数据库系统基础教程 课后题答案

    3. 查询优化:通过索引、查询重写、连接算法优化等方式,提高数据库查询速度。 这些章节的学习和练习可以帮助我们理解数据库系统的基本原理,掌握如何使用SQL进行数据操作,并了解数据库设计和性能优化的方法。通过...

    数据库复习资料

    索引是提高数据库查询速度的关键工具。B树、B+树和哈希索引是常见的索引结构,它们各有优缺点,适用于不同的查询场景。合理创建和管理索引可以显著提升数据库性能。 数据库优化是数据库管理员的重要职责。这包括...

    数据库操作KTV系统

    7. 性能优化:通过索引创建、查询优化、数据分区等手段提高数据库查询速度,减少响应时间,提升用户体验。 8. 数据备份与恢复:为防止数据丢失,定期进行数据库备份,并在需要时能够恢复数据,保证服务的连续性。 ...

    分布式数据库查询优化

    1. **基于索引的优化**:通过在数据库表的关键列上建立索引,可以显著提高查询速度。例如,在经常用于连接操作的列上建立索引可以避免全表扫描。需要注意的是,创建索引本身也需要消耗一定的资源,因此需要根据实际...

    数据库课程设计.zip

    索引是提高数据库查询速度的重要手段,通过在表的特定列上创建索引,可以显著优化数据检索。学生应了解不同类型的索引(如B树索引、哈希索引)及其在性能上的差异,并学会在合适的情况下创建和管理索引。 事务处理...

    如何提高数据库访问效率

    提高数据库访问效率可以帮助缩短查询时间,提升用户体验,并降低服务器资源的消耗。以下是一些优化数据库访问效率的策略: 1. **索引优化**:索引是加快查询速度的重要手段。如果没有索引或者索引使用不当,查询...

    学生课程管理系统数据库ER图.docx

    * 索引优化:使用索引来提高数据库查询速度。 * 查询优化:优化数据库查询语句来提高查询速度。 * 缓存优化:使用缓存来提高数据库查询速度。 九、数据库管理 * 数据库设计:设计数据库的架构和结构。 * 数据库...

Global site tag (gtag.js) - Google Analytics