2024年10月数据库百万级数据优化(千万数据库优化)

 更新时间:2024-10-12

  ⑴数据库百万级数据优化(千万数据库优化)

  ⑵本文主要介绍数据库百万级数据优化(千万级数据库优化),下面一起看看数据库百万级数据优化(千万级数据库优化)相关资讯。

  ⑶网上有很多关于sql优化的教程,但是都很混乱。他们已经安排好几天了。把它们写出来和大家分享。如有错误和不足,请指正。()选择最有效的序列(表名只基于有效规则SEO/target=;_blankoptimizer):Oracle解析器从右到左依次处理from子句中的表,写在表末的FROM子句(基于表驱动的表)会先处理,FROM子句包含多个表,你必须选择的记录数是基表。如果有三个以上的表连接到query,需要选择crosstab(交叉表)的下载地址作为基表,交叉表引用其他表引用的表。()在WHERE子句中加入顺序。:Oracle序列分析的WHERE子句是自下而上的。根据这个原则,表与表之间的连接必须写在另一端的条件中,可以筛选出最大数量的记录,必须写在WHERE子句中。()使用*避免选择子句:在解析过程中,Oracle将*转换为所有名称,这是通过查询数据字典来完成的,这意味着需要更多的时间。()减少收购=_blank数据库:Oracle在内部执行很多任务:解析SQL语句、使用估算指标、组合变量、读取数据块等。()sql,sql*form和arraysize参数配置,提高检索数据量=每次获取_空白数据库访问。建议值为。()使用解码功能减少处理时间:使用解码功能避免扫描同一条记录或同一张表的重复操作。()变得简单和不相关_blank=数据库访问:如果您有几个简单的get=_blank数据库查询语句,您可以将它们集成到一个查询中(即使它们不相关)。()删除重复记录:删除重复记录最有效的方法(因为数据使用):从e.rowid中的EMP中删除(从EMPX中选择min(X.rowid));()当使用截断代替删除时,表中的记录被删除。正常情况下,回滚段(rollbacksegment)用于存储可以恢复的信息。如果事务未提交,Oracle会将数据删除回返回前的状态(准确地说是在使用截断条件之前恢复delete命令),并且没有回滚段存储来恢复任何信息。命令运行时,数据无法恢复。调用的资源很少,执行时间会很短。(如果截断只是在一个满表中,截断不删除,DDLDML)()尽可能使用提交:在程序中尽可能使用提交,这个程序的性能得到提升,因为需求会释放提交资源,减少提交的释放:用于恢复数据信息的资源。b是c重做锁程序语句日志缓冲区d.Oracle管理空间中三种资源的开销。()将WHERE子句中的子句替换为子句:避免使用子句with子句,只有在检索到结果集中的所有记录后才进行筛选。这个过程需要排序和总运算。如果WHERE子句限制了记录的数量,则可以减少开销(非Oracle)子句。是的,在那里,有三个条件可以添加,这是第一个实现的地方。最后,因为是第一个不过滤统计后只满足条件的记录,所以可以减少中间操作数进行处理,据说速度最快。现在它应该比having速度快,因为过滤后的数据和是在两个表连接时使用的,所以它与表相比有左侧。在这个单表查询统计中,如果没有字段参与过滤条件的计算,结果也是一样的,只是在可以使用Rushmore技术的时候,而且后者并不慢。如果需要计算字段,就意味着之前没有计算的字段的值是不确定的。根据编写的程序,时间是在计算之前完成的,但是在计算之后才起作用,所以在这种情况下结果是不一样的。在多表连接查询中,比这里更早。首先,系统根据不同表之间的连接条件,先从多个表中形成一个临时表,然后筛选通过的地方,再计算,再筛选通过。所以要想在过滤条件中起到正确的作用,首先要了解条件什么时候起作用,然后再决定放在那里。()减少查询表:包含子查询的SQL语句,要特别注意减少表的查询。selecttab_namefromtable(tab_name,db_ver)=(selecttab_name,tab_columns=db_ver)()通过内部函数提高SQL效率。复杂的SQL经常牺牲执行效率。掌握上述函数方法在实际工作中的应用具有重要的现实意义。()使用表别名(aliases):在一条SQL语句中连接多个表时,请使用表的别名,并在每一列上添加别名,这样可以减少分析时间,减少列歧义导致的语法错误。()使用existenc:(高)SELECT*FROMEMP(基本类型)和exist(SELECTx;fromdept.deptno=emp.deptno和LOC)。=pany(select)fromempno(selectthedepartmentLOC=;公司和。;)()fromEMPNO(基表)。虽然各种图形工具sqlseo/target=endless;_blank优化,它永远是编写SQL工具解决问题的最佳。Selectexecute,disk_reads,buffer_gets,circle((buffer_gets-disk_reads)/buffer_gets,)hit_radio,circle(disk_reads/execute,)reads_per_run,在执行和buffer_gets和(buffer_gets-disk_reads)/buffer_getslt;.;()提高效率指数是一个概念,也是表的一部分。为了提高数据检索的效率,Oracle使用了复杂的自平衡树结构。一般来说,索引查询数据比全表扫描快。当Oracle找到最佳路径并且UPDATE语句执行查询时,OracleSEO/Target=;_blank优化程序将使用相同的索引。在多表连接中使用索引也可以提高效率。另一个优点是使用索引,它提供主键的唯一验证。对于long或long基本数据类型,几乎可以索引所有列。特殊索引通常在大型表中有效使用。当然,你也会发现,在小型扫描表中,使用索引也可以提高效率。虽然可以利用指数查询效率,但是也要注意价格指数。它需要存储空间和定期维护。每当表、索引或列中的记录被修改时,索引本身也会被修改。这意味着每条记录的插入、删除和更新都要比磁盘IO多花费、倍,因为索引需要存储空间,多余的、不必要的索引会拖慢查询响应时间,所以需要定期重新配置索引。ALTERINDEXREBUILDReplacewithExistence():提交包含一对多表信息的查询时(比如部门表和表),避免使用obvious。在SELECT子句中,可以认为存在替换,使得搜索更快,因为RDBMS核心模块满足子查询条件一次,立即返回结果。例:(低):选择不同的dept_no,dept_name从属于d,EMP在d.dept_no=e.dept_no_no(效率高):有很多优点。()server/target=;_blank是大写的,因为Oracle总是解析server/target=;_blank优先,并将小写字母转换为大写字母。()减少java代码连接器的数量连接字符串的使用!()避免使用索引列。通常,我们应该避免使用索引列。对索引列上的函数没有相同的影响。当Oracle不满意时,它将停止使用索引来执行全表扫描。()避免使用puted.where子句来索引列。如果索引列是函数,部分,SEO/target=;_blank优化器将不使用索引,而使用全表扫描。比如:效率低:选择..*个个部门;高效率:从…中选择;()效率高:SELECT*=而不是EMPatdeptno=fromEMPatlow:选择表的区别在于,前者DBMS会直接跳转到第一条等于的记录,后者会查找表中第一条已扫描超过条记录的记录。()通常用replace或merge(用于索引列)替换WHERE子句中的OR,用union效果会更好。使用或将导致对索引列进行全表扫描。请注意,上述规则仅对多个索引列有效。如果该列没有索引,查询效率可能会因为你别无选择,只能减少或。在下面的示例中,loc_id和region基于高索引。Loc_desc,地区:selectloc_id,fromlocationloc_idallianceselect=loc_id,loc_desc,fromlocationarea=墨尔本selectarea:loc_id,loc_desc,locationorareaoflowarealoc_id==墨尔本。如果坚持使用,至少需要写回索引列的记录。()通过替换or来记忆规则是一种简单的方法,和测试、Oraclei数据库的实际实现效果,以及执行路径好像是一样的。低效率:从地点的选择...…loc_id=或loc_id=或loc_id=,请高效选择...从LOC_IN(,,)的位置;()避免使用空列索引,索引中的空值可以避免使用任何空列,Oracle将无法使用该索引。对于单个索引,如果列包含空值,则记录没有索引。对于复合索引,如果每一列都为空,则该索引也有记录。如果至少有一列不为空,则索引中的记录。例如,如果唯一索引基于表的A列和B列,并且表中有一个值为B(,null)的记录,则Oracle不会接受(插入)B(,null)记录的相同值A。但是,如果索引列都是空的,Oracle会认为键是空的,空的就不是空的。因此,您可以使用插入个文件键值相同的记录,当然是空的!该值在索引列中不存在,因此在WHERE子句中与索引列的null值进行比较会导致Oracle禁用该索引。无效:(索引失败)Select…fromdept_code;生效:(指标生效)部门在dept_code=中选择;()第一列总是使用索引:如果索引基于多列,并且只在其第一列(第一列)的WHERE子句中被引用,则SEO/Target=;_blank优化程序将选择使用索引。这是一个简单而重要的规则。当引用索引中只有两列时,SEO/Target=;_blankoptimizer使用全表和union-all扫描并忽略的索引()替换union(如果可能):当SQL语句需要联合两个查询结果集时,两组结果将合并union-all,然后在最终输出结果中进行排名。如果用共同所有权代替共同所有权,那么这是不必要的。所以它的分类效率会提高。注意,联合所有者将在同一个记录集中重复输出两个结果。因此,您应该从业务需求出发,分析使用联合的可行性。联盟将对结果进行排序,排序结果将用于sort_area_size内存。这对于SEO/target=;_内存优化后空白。可以用SQL查询消费排名。低效率:选择账户数量,从借方交易中选择at数量余额数量,交易日期=年月日联盟,并选择联盟。高效率:选择at_num,从debit_transactions中选择balanc:表包含以下各列:dept_codePK不为空,dept_descdept_type为空且无效:(不使用索引)Selectdept_typedept_codeefficiency:(使用索引)Selectdept_typeofdept_code()避免更改索引列的类型。在比较不同数据类型的数据时,Oracle会自动对列执行简单的类型转换。假设EMPNO是一个数字类型的索引列。select…fromwhereempmpempno=is。事实上,经过Oracle类型转换后,该语句转换为:Select…fromEMPinEMPNO=to_number(;).幸运的是,索引列上没有类型转换,索引的使用也没有改变。现在,假设emp_type是字符类型的索引列。Select…fromEMPatemp_type=。此语句从Oracle转换为:Select…fromEMPwhereto_number(EMP_type)=。由于转换后的本地类型,索引将不会被用来避免Oracle的类型!sql的隐式转换,最好使用显式类型转换性能。请注意,在比较字符和值时,Oracle将优先考虑字符类型的数字转换。()ToWHERE子句:注意,SELECT语句中的WHERE子句不使用某些索引。这里有一些例子。在下面的例子中,()!=不使用索引。记住,索引只能告诉你表中有什么,但它可以Idon’我不会告诉你表中没有的内容。()是||连接功能。像其他字符一样禁用索引。()它是一个数学函数。就像其他禁用索引的数学函数一样。()相同的索引列不能相互比较,这将启用完整的表扫描。()A.如果记录的数量超过%,数据检索表的数量。使用索引并不会显著提高b的效率,在某些情况下,使用索引可能会比全表扫描慢很多,但这是同一个数量级的差别。一般来说,防止使用索引时间几次甚至上千次比使用全表扫描要好得多!()避免使用消耗资源的操作:Clear、joint、减号、交集和SQL序列语句会启动SQL引擎进行资源密集型排序(sorting)。区分需要排序操作,而其他的至少需要执行两次排序。通常情况下,使用并集、减号和SQL的cross语句还可以有其他用法。如果你重写=_blank数据库部署sort_area_size并使用并集减法和交集,可以考虑一下,毕竟它们是可读的()SEO/goal=;_blank优化组:提高报表组效率。它可以过滤掉组中没有的记录。;以前不需要。以下两个查询返回相同的结果,但是第二个查询显然更快。无效率:从EMP集团选择工作,AVG(Sal)有效率:从工作或工作或经理或经理(AVG)中选择工作。

您可能感兴趣的文章:

相关文章