`
leiyongping88
  • 浏览: 76886 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

大数据查询怎么优化?

 
阅读更多

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。


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.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;
它必须在编译时进行选择。然而,
如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。
如下面语句将进行全表扫描: select id from t where num=@num
可以改为强制查询使用索引: select id from t with(index(索引名)) where num=@num



8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
如: select id from t where num/2=100 应改为: select id from t where num=100*2


9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
    如: select id from t where substring(name,1,3)='abc'--name以abc开头的id
    select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id
    应改为: select id from t where name like 'abc%' select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'



10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。


11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,
否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。


12.不要写一些没有意义的查询,如需要生成一个空表结构:
    select col1,col2 into #t from t where 1=0
    这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t(...)


13.很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b)
    用下面的语句替换: select num from a where exists(select 1 from b where num=a.num)


14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,
  SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。


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


16.应尽可能的避免更新 clustered 索引数据列,因为 clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,
 会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引。


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


18.尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。


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


20.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。


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


22.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。


23.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;
 如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。


24.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。


25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。


26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。


27.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。
如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。


28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。


29.尽量避免大事务操作,提高系统并发能力。


30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

分享到:
评论

相关推荐

    大数据查询和多行读写时的进度显示

    在大数据查询和多行读写过程中,进度显示是提高用户体验和优化操作感知的重要技术。它能够让用户了解任务的执行状态,提升等待过程的耐心,并在必要时作出相应调整。以下是对这些知识点的详细阐述: 1. **大数据...

    基于Hbase的大数据查询优化

    因为面向列的特点,Hbase只能单单地以rowkey为主键作查询,而无法对表进行多维查询和join操作,并且查询通常都是全表扫描,耗费资源较大,查询效率较低。类比于传统型数据库里的一些查询方式,本文对Hbase的存储原理进行了...

    基于分布式技术的交通大数据查询优化.pdf

    通过这些知识点,可以看出分布式技术在处理大数据查询优化中的重要性,尤其是对于交通领域这样的数据密集型应用。分布式系统提供了新的数据处理框架,显著提高了数据处理能力,这对于信息化时代的多方面应用都具有...

    大数据优化

    在大数据环境中,Oracle数据库的优化包括索引策略、查询优化、存储优化和并发控制。合理的索引可以加速查询,智能查询优化器能自动选择最佳执行计划,而分区技术和压缩技术可以减少存储需求。此外,适当的并发控制...

    大数据查询优化和索引设计.pptx

    解决方案,研究报告,行业方案

    DTCC2015-Wing-新一代百度大数据查询引擎-刘成

    ### DTCC2015-Wing-新一代百度大数据查询引擎-...综上所述,Wing作为百度新一代的大数据查询引擎,在架构设计、语义接口和执行优化等方面都进行了精心设计,旨在为用户提供高性能、灵活和易于维护的数据处理解决方案。

    使用sql语言查询大数据

    因此,合理设计和使用索引是大数据查询优化的关键。 GROUP BY语句用于数据分组,常与聚合函数(如COUNT、SUM、AVG等)配合使用。在大数据中,GROUP BY操作可能会消耗大量内存和计算资源,因此可以考虑使用分区表或...

    大数据查询与分析技术——SQL on Hadoop.pdf

    为了解决这些挑战,大数据查询与分析技术需要不断地创新和发展,例如开发新的查询语言和执行引擎、改进现有的查询优化器和执行引擎、开发新的数据存储和处理技术等。同时,大数据查询与分析技术也需要与其他技术领域...

    大数据查询分析系统.zip

    4. 自动化与智能化:通过机器学习和人工智能技术,实现数据预处理、查询优化和异常检测的自动化。 四、应用场景 1. 电子商务:通过对用户行为数据的分析,推荐个性化商品,优化营销策略。 2. 金融风控:实时监控...

    WebSerivce大数据查询.rar

    Web服务在处理大数据查询时面临着严峻的...综上,"WebSerivce大数据查询.rar"的MyProject可能是一个综合了大数据处理、并发控制、服务化架构、数据库优化等多个领域的实践案例,为处理大数据查询提供了全面的解决方案。

    mysql大数据查询优化经验分享(推荐)

    MySQL大数据查询优化是数据库性能提升的关键,特别是在处理海量数据时,高效的查询能够显著减少等待时间,提高用户体验。本文将分享一些实用的SQL优化技巧,主要关注索引优化和WHERE条件优化。 首先,对于大数据量...

    基于Hadoop的风力发电监测大数据存储优化及并行查询方法.docx

    ### 基于Hadoop的风力发电监测大数据存储优化及并行查询方法 #### 一、研究背景与意义 随着可再生能源的广泛应用,风力发电作为一种清洁且可持续的能源形式,其发展得到了全球范围内的重视。风力发电监测系统的...

    什么是大数据开发?大数据开发课程有哪些.pdf

    1. **Hadoop 开发工程师**:负责Hadoop集群的搭建、维护和优化。 2. **数据挖掘工程师**:运用算法和统计模型,从数据中发现模式和洞察。 3. **大数据科学家**:研究复杂的数据问题,设计实验,创建预测模型。 4. **...

    99- 阿里云大数据成本优化实践.pdf

    ### 阿里云大数据成本优化实践 #### 一、阿里云大数据成本优化方案概览 随着大数据技术的发展,企业面临着越来越复杂的业务需求和技术挑战。阿里云提供的大数据成本优化方案旨在帮助企业通过采用云原生技术来提高...

    基于MapReduce的大数据在线聚集优化设计.pdf

    文章中提到的大数据在线聚集优化设计正是针对MapReduce框架在执行大数据在线聚集时的不足而进行的优化。通过引入启发式优先方法和动态切换机制,它在保证执行效率的同时,也增强了处理大数据时的灵活性和准确性。这...

    企业大数据云平台功能优化方案.pdf

    1.2.1.2 数据库优化:针对SQL查询性能、索引结构、数据分区等进行调整,以提高查询效率和响应速度,同时考虑数据库的扩展性和高可用性。 2. 其他功能描述 2.1 其他优化需求 除了平台层面的优化,还需要关注其他...

    Struts利用大数据查询天气

    这里可能涉及到复杂的查询优化,如数据分区、索引等技术,以提高查询效率。 5. 查询结果返回给Action类,经过必要的处理(如格式化、聚合等)后,Action将结果传递给指定的JSP或Freemarker模板,生成响应的HTML页面...

    用于电力大数据快速组合查询的动态索引技术.pdf

    1. 索引算法的优化:研究和开发更高效的索引算法,以适应电力大数据的特殊性,提升查询性能和数据处理速度。 2. 存储架构的优化:设计更为合理的存储架构,以支持大规模数据的存储和快速访问,减少数据冗余和提高...

Global site tag (gtag.js) - Google Analytics