如何优化数据库查询

宏观:

1.缓存。在持久层或持久层之上做缓存。 从数据库中查询出来的数据先放入缓存中,下次查询时,先访问缓存,如果未命中则查询数据库。

2.表分区和拆分.无论是业务逻辑上的拆分还是无业务含义的分区。

3.提高磁盘速度.这包括RAID和其他磁盘文件分段的处理。主要的思想是提高磁盘的并发度(多个物理磁盘存放同一个文件)。

微观:

表设计方面:

1.字段冗余.减少跨库查询和大表连接操作。

2.数据库表的大字段剥离.保证单条记录的数据量很小。

3.恰当地使用索引, 甚至是多级索引。

查询优化方面:

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20可以这样查询:

select id from t where num=10 union all select id from t where num=20

5.in 和 not in 也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

6.下面的查询也将导致全表扫描:

select id from t where name like ‘%abc%‘ 若要提高效率,可以考虑全文检索。

7.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有 必要。

8.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

9.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

10.避免频繁创建和删除临时表,以减少系统表资源的消耗。

如何优化数据库查询

时间: 2024-08-01 20:58:13

如何优化数据库查询的相关文章

怎样优化数据库查询

宏观: 1.缓存.在持久层或持久层之上做缓存. 从数据库中查询出来的数据先放入缓存中,下次查询时,先訪问缓存.假设未命中则查询数据库. 2.表分区和拆分.不管是业务逻辑上的拆分还是无业务含义的分区. 3.提高磁盘速度.这包含RAID和其它磁盘文件分段的处理.基本的思想是提高磁盘的并发度(多个物理磁盘存放同一个文件). 微观: 表设计方面: 1.字段冗余.降低跨库查询和大表连接操作. 2.数据库表的大字段剥离.保证单条记录的数据量非常小. 3.恰当地使用索引, 甚至是多级索引. 查询优化方面: 2

基础的优化数据库查询,个人笔记

当一条查询语句中包含所有的子句,执行顺序依下列子句次序: FROM 子句:执行顺序为从后往前.从右到左.数据量较少的表尽量放在后面. WHERE子句:执行顺序为自下而上.从右到左.将能过滤掉最大数量记录的条件写在WHERE 子句的最右. GROUP BY:执行顺序从左往右分组,最好在GROUP BY前使用WHERE将不需要的记录在GROUP BY之前过滤掉. HAVING 子句:消耗资源.尽量避免使用,HAVING 会在检索出所有记录之后才对结果集进行过滤,需要排序等操作. SELECT子句:少

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

SQLServer性能优化之 nolock,大幅提升数据库查询性能

公司数据库随着时间的增长,数据越来越多,查询速度也越来越慢.进数据库看了一下,几十万调的数据,查询起来确实很费时间. 要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑.其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能. 不过有一点千万要注意的就是,WITH (NOLOCK)的SQL SELECT有可能会造成Dirty Read,就是读到无效的数据.

优化MySQL数据库查询

在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用.使用索引.使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的. 任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响. 如同其它学科,优化查询性能很大程度上决定于开发者的直觉.幸运的是,像MySQL这样的数据库自带有一些协助工具.本文简要讨论诸多工具之三种:使用索引,使用E

谈谈如何优化MYSQL数据库查询

1.优化数据类型 MySQL中数据类型有多种,如果你是一名DBA,正在按照优化的原则对数据类型进行严格的检查,但开发人员可能会选择他们认为最简单的方案,以加快编码速度,或者选择最明显的选择,因此,你可能面临的都不是最佳的选择,如果可能的话,你应该尝试以通用准则来改变这些决定. (1)避免使用NULL NULL对于大多数数据库都需要特殊处理,MySQL也不例外,它需要更多的代码,更多的检查和特殊的索引逻辑,有些开发人员完全没有意识到,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,

面试题:谈谈如何优化MYSQL数据库查询

1.优化数据类型 MySQL中数据类型有多种,如果你是一名DBA,正在按照优化的原则对数据类型进行严格的检查,但开发人员可能会选择他们认为最简单的方案,以加快编码 速度,或者选择最明显的选择,因此,你可能面临的都不是最佳的选择,如果可能的话,你应该尝试以通用准则来改变这些决定. (1)避免使用NULL NULL对于大多数数据库都需要特殊处理,MySQL也不例外,它需要更多的代码,更多的检查和特殊的索引逻辑,有些开发人员完全没有意识到,创建表时NULL是默认值,但大多数时候应该使用NOT NULL

优化SQL Server数据库查询方法

SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优

优化之——查询数据库

紧张的工作中恰好有点空闲的时间,就认真看着自己写的代码,想想哪里可以“优化”一点……(此灵感之一来源于自己的脑子里一直记得‘优化’这两个字,到后期就会看看哪里可以优化,之二便是这几天‘甜到大家的’<微微一笑很倾城>中看到大神他们为了项目中的优化问题,废寝忘食的干劲,联想到自己就觉得也应该向他们一样,结果要求完美一点).那就总结一下自己少之又少的优化方案吧? 先看一段代码: let usersData = await this.model("users).field("sid