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

发布时间:2024-02-18
本文主要介绍数据库百万级数据优化(千万级数据库优化),下面一起看看数据库百万级数据优化(千万级数据库优化)相关资讯。
网上有很多关于sql优化的教程,但是都很混乱。他们已经安排好几天了。把它们写出来和大家分享。如有错误和不足,请指正。(1)选择最有效的序列(表名只基于有效规则seo/target = ;_ blank optimizer):oracle解析器从右到左依次处理from子句中的表,写在表末的from子句(基于表驱动的表)会先处理,from子句包含多个表,你必须选择的记录数是基表。如果有三个以上的表连接到query,需要选择crosstab(交叉表)的下载地址作为基表,交叉表引用其他表引用的表。(2)在where子句中加入顺序。:oracle序列分析的where子句是自下而上的。根据这个原则,表与表之间的连接必须写在另一端的条件中,可以筛选出最大数量的记录,必须写在where子句中。(3)使用*避免选择子句:在解析过程中,oracle将*转换为所有名称,这是通过查询数据字典来完成的,这意味着需要更多的时间。(4)减少收购= _blank数据库:oracle在内部执行很多任务:解析sql语句、使用估算指标、组合变量、读取数据块等。(5) sql,sql * form和arraysize参数配置,提高检索数据量=每次获取 _空白数据库访问。建议值为200。(6)使用解码功能减少处理时间:使用解码功能避免扫描同一条记录或同一张表的重复操作。(7)变得简单和不相关 _blank =数据库访问:如果您有几个简单的get = _blank数据库查询语句,您可以将它们集成到一个查询中(即使它们不相关)。(8)删除重复记录:删除重复记录最有效的方法(因为数据使用):从e.rowid中的emp中删除(从emp x中选择min(x . rowid));(9)当使用截断代替删除时,表中的记录被删除。正常情况下,回滚段(rollback segment)用于存储可以恢复的信息。如果事务未提交,oracle会将数据删除回返回前的状态(准确地说是在使用截断条件之前恢复delete命令),并且没有回滚段存储来恢复任何信息。命令运行时,数据无法恢复。调用的资源很少,执行时间会很短。(如果截断只是在一个满表中,截断不删除,ddl dml) (10)尽可能使用提交:在程序中尽可能使用提交,这个程序的性能得到提升,因为需求会释放提交资源,减少提交的释放:用于恢复数据信息的资源。b是c重做锁程序语句日志缓冲区d. oracle管理空间中三种资源的开销。(11)将where子句中的子句替换为子句:避免使用子句with子句,只有在检索到结果集中的所有记录后才进行筛选。这个过程需要排序和总运算。如果where子句限制了记录的数量,则可以减少开销(非oracle)子句。是的,在那里,有三个条件可以添加,这是第一个实现的地方。最后,因为是第一个不过滤统计后只满足条件的记录,所以可以减少中间操作数进行处理,据说速度最快。现在它应该比having速度快,因为过滤后的数据和是在两个表连接时使用的,所以它与表相比有左侧。在这个单表查询统计中,如果没有字段参与过滤条件的计算,结果也是一样的,只是在可以使用rushmore技术的时候,而且后者并不慢。如果需要计算字段,就意味着之前没有计算的字段的值是不确定的。根据编写的程序,时间是在计算之前完成的,但是在计算之后才起作用,所以在这种情况下结果是不一样的。在多表连接查询中,比这里更早。首先,系统根据不同表之间的连接条件,先从多个表中形成一个临时表,然后筛选通过的地方,再计算,再筛选通过。所以要想在过滤条件中起到正确的作用,首先要了解条件什么时候起作用,然后再决定放在那里。(12)减少查询表:包含子查询的sql语句,要特别注意减少表的查询。select tab _ name from table(tab _ name,db_ver)= (select tab_name,tab_columns = 604 db_ver) (13)通过内部函数提高sql效率。复杂的sql经常牺牲执行效率。掌握上述函数方法在实际工作中的应用具有重要的现实意义。(14)使用表别名(aliases):在一条sql语句中连接多个表时,请使用表的别名,并在每一列上添加别名,这样可以减少分析时间,减少列歧义导致的语法错误。(15)使用existenc:(高)select * from emp(基本类型)0和exist(select x ;from dept.deptno = emp.deptno和loc)。= company(select)from empno(select the department loc = ;公司和。;)(16) from empno(基表)0。虽然各种图形工具sqlseo/target = endless ;_blank优化,它永远是编写sql工具解决问题的最佳。select execute,disk_reads,buffer_gets,circle((buffer _ gets-disk _ reads)/buffer _ gets,2)hit_radio,circle (disk_reads/execute,2)reads_per_run,在执行0和buffer _ gets和(buffer _ gets-disk _ reads)0/buffer _ gets lt;0.8;(17)提高效率指数是一个概念,也是表的一部分。为了提高数据检索的效率,oracle使用了复杂的自平衡树结构。一般来说,索引查询数据比全表扫描快。当oracle找到最佳路径并且update语句执行查询时,oracle seo/target = ;_blank优化程序将使用相同的索引。在多表连接中使用索引也可以提高效率。另一个优点是使用索引,它提供主键的唯一验证。对于long或long基本数据类型,几乎可以索引所有列。特殊索引通常在大型表中有效使用。当然,你也会发现,在小型扫描表中,使用索引也可以提高效率。虽然可以利用指数查询效率,但是也要注意价格指数。它需要存储空间和定期维护。每当表、索引或列中的记录被修改时,索引本身也会被修改。这意味着每条记录的插入、删除和更新都要比磁盘io多花费4、5倍,因为索引需要存储空间,多余的、不必要的索引会拖慢查询响应时间,所以需要定期重新配置索引。alterindexrebuild replace with existence(18):提交包含一对多表信息的查询时(比如部门表和表),避免使用obvious。在select子句中,可以认为存在替换,使得搜索更快,因为rdbms核心模块满足子查询条件一次,立即返回结果。例:(低):选择不同的dept_no,dept_name从属于d,emp在d.dept_no = e.dept_no _ no(效率高):有很多优点。(19)server/target = ;_blank是大写的,因为oracle总是解析server/target = ;_ blank优先,并将小写字母转换为大写字母。(20)减少java代码连接器的数量连接字符串的使用!(21)避免使用索引列。通常,我们应该避免使用索引列。对索引列上的函数没有相同的影响。当oracle不满意时,它将停止使用索引来执行全表扫描。(22)避免使用computed.where子句来索引列。如果索引列是函数,部分,seo/target = ;_blank优化器将不使用索引,而使用全表扫描。比如:效率低:选择..* 12个25000个部门;高效率:从… 25000 12中选择;(23)效率高:select * =而不是emp at deptno = 4 from emp at low:选择表3的区别在于,前者dbms会直接跳转到第一条等于4的记录,后者会查找表3中第一条已扫描超过3条记录的记录。(24)通常用replace或merge(用于索引列)替换where子句中的or,用union效果会更好。使用或将导致对索引列进行全表扫描。请注意,上述规则仅对多个索引列有效。如果该列没有索引,查询效率可能会因为你别无选择,只能减少或。在下面的示例中,loc_id和region基于高索引。loc_desc,地区:select loc_id,from location loc _ id alliance select = 10 loc _ id,loc_desc,from location area =墨尔本select area: loc_id,loc_desc,location or area of low area loc _ id = 10 =墨尔本。如果坚持使用,至少需要写回索引列的记录。(25)通过替换or来记忆规则是一种简单的方法,和测试、oracle8i数据库的实际实现效果,以及执行路径好像是一样的。低效率:从地点的选择...…loc_id = 10或loc_id = 20或loc_id = 30,请高效选择...从loc _ in (10,20,30)的位置;(26)避免使用空列索引,索引中的空值可以避免使用任何空列,oracle将无法使用该索引。对于单个索引,如果列包含空值,则记录没有索引。对于复合索引,如果每一列都为空,则该索引也有记录。如果至少有一列不为空,则索引中的记录。例如,如果唯一索引基于表的a列和b列,并且表中有一个值为b (123,null)的记录,则oracle不会接受(插入)b(123,null)记录的相同值a。但是,如果索引列都是空的,oracle会认为键是空的,空的就不是空的。因此,您可以使用插入1000个文件键值相同的记录,当然是空的!该值在索引列中不存在,因此在where子句中与索引列的null值进行比较会导致oracle禁用该索引。无效:(索引失败)select…from dept _ code;生效:(指标生效)部门在dept_code = 0中选择;(27)第一列总是使用索引:如果索引基于多列,并且只在其第一列(第一列)的where子句中被引用,则seo/target = ;_blank优化程序将选择使用索引。这是一个简单而重要的规则。当引用索引中只有两列时,seo/target = ;_blank optimizer使用全表和union-all扫描并忽略的索引(28)替换union(如果可能):当sql语句需要联合两个查询结果集时,两组结果将合并union-all,然后在最终输出结果中进行排名。如果用共同所有权代替共同所有权,那么这是不必要的。所以它的分类效率会提高。注意,联合所有者将在同一个记录集中重复输出两个结果。因此,您应该从业务需求出发,分析使用联合的可行性。联盟将对结果进行排序,排序结果将用于sort_area_size内存。这对于seo/target = ;_内存优化后空白。可以用sql查询消费排名。低效率:选择账户数量,从借方交易中选择acct数量余额数量,交易日期= 95年12月31日 联盟,并选择联盟。高效率:选择acct_num,从debit_transactions中选择balanc:表包含以下各列:dept_code pk不为空,dept_desc dept_type为空且无效:(不使用索引)select dept _ type dept _ code efficiency:(使用索引)select dept_type of dept_code (30)避免更改索引列的类型。在比较不同数据类型的数据时,oracle会自动对列执行简单的类型转换。假设empno是一个数字类型的索引列。select…from where empmpempno = 123 is。事实上,经过oracle类型转换后,该语句转换为:select…from emp in empno = to _ number( ;123).幸运的是,索引列上没有类型转换,索引的使用也没有改变。现在,假设emp_type是字符类型的索引列。select … from emp at emp_type = 123。此语句从oracle转换为:select…from emp where to _ number(emp _ type)= 123。由于转换后的本地类型,索引将不会被用来避免oracle的类型!sql的隐式转换,最好使用显式类型转换性能。请注意,在比较字符和值时,oracle将优先考虑字符类型的数字转换。(31) to where子句:注意,select语句中的where子句不使用某些索引。这里有一些例子。在下面的例子中,(1)!=不使用索引。记住,索引只能告诉你表中有什么,但它可以 i don’我不会告诉你表中没有的内容。(2)是| | 连接功能。像其他字符一样禁用索引。(3)它是一个数学函数。就像其他禁用索引的数学函数一样。(4)相同的索引列不能相互比较,这将启用完整的表扫描。(32) a .如果记录的数量超过30%,数据检索表的数量。使用索引并不会显著提高b的效率,在某些情况下,使用索引可能会比全表扫描慢很多,但这是同一个数量级的差别。一般来说,防止使用索引时间几次甚至上千次比使用全表扫描要好得多!(33)避免使用消耗资源的操作:clear、joint、减号、交集和sql序列语句会启动sql引擎进行资源密集型排序(sorting)。区分需要排序操作,而其他的至少需要执行两次排序。通常情况下,使用并集、减号和sql的cross语句还可以有其他用法。如果你重写= _blank数据库部署sort_area_size并使用并集减法和交集,可以考虑一下,毕竟它们是可读的(34)seo/goal = ;_blank优化组:提高报表组效率。它可以过滤掉组中没有的记录。;以前不需要。以下两个查询返回相同的结果,但是第二个查询显然更快。无效率:从emp集团选择工作,avg (sal)有效率:从工作或工作或经理或经理(avg)中选择工作。
了解更多数据库百万级数据优化(千万级数据库优化)相关内容请关注本站点。
上一个:桩基有哪些基本要求?
下一个:电脑有什么免费游戏玩(电脑有什么免费游戏好玩的)

敬亭绿雪概述
喝茶,一种高级的修养
旅游景点自动气象站&气象规范使用【防雷地网】
集散控制系统中的软/硬件结构
打游戏台式电脑配置怎么选比较好,6000左右的游戏台式电脑配置
台式电脑组装需要哪些线,组装电脑的线需要哪些
装系统进pe找不到硬盘,进入PE后找不到电脑硬盘怎么办
详谈压力变送器的标定工作温度范围
法院对变造身份证件罪的裁量标准?
sagermack工控配件(原装正品保证价格优惠)