Oracle优化器:星型转换(Star Query Transformation )



 Oracle优化器:星型转换(Star Query Transformation ) 



Star query是一个事实表(fact table)和一些维度表(dimension)的join。每个维度表都跟事实表通过主外键join,且每个维度表之间不join



星型模式设计的好处:

1) 提供了直接、直观的业务实体与终端用户schema设计的映射。

2) 对典型的star query提供了高性能的优化。

3) 通过大量的商业智能工具的广泛支持,可能会期望甚至要求数据仓库架构包含维度表。

星型模式是用于简单的数据集市和大型数据仓库。

 



 

雪花状模式(snowflake schema):

Snowflake schemastar schema的一种,但更复杂。它的维度数据被分到多个表而不是一个大表。更多的维度表,更多的外键joins,使查询更复杂,查询性能下降。

Oracle建议使用star schema替代snowflake schema,除非你有别的原因。

 

 

优化Star Query

1) fact table的每个外键列上建立bitmap index

2) 初始化参数STAR_TRANSFORMATION_ENABLED 应被设为TRUE,默认false

星型转换(Star transformation)能为star query提供高效的查询性能。


 

 

 

合适的情况下,Oracle会自动选择star transformation技术,隐视重写star query SQL,提高star query效率。

 

星型查询2个基本步骤:

1) fact table中检索出必要的结果集。(bitmap index会提高效率)

2) 结果集与维度表joins

 

 

星型转换(bitmap index)

通过bitmap AND操作将3个维度表bitmaps为一个单独的bitmap,然后与fact table通过bitmap indexes逻辑JOIN

SELECT ch.channel_class,

       c.cust_city,

       t.calendar_quarter_desc,

       SUM(s.amount_sold) sales_amount

  FROM sales s, times t, customers c, channels ch

 WHERE s.time_id = t.time_id

   AND s.cust_id = c.cust_id

   AND s.channel_id = ch.channel_id

   AND c.cust_state_province = 'CA'

   AND ch.channel_desc in ('Internet''Catalog')

   AND t.calendar_quarter_desc IN ('1999-01''1999-02')

 GROUP BY ch.channel_class, c.cust_city, t.calendar_quarter_desc;


 

 

星型转换(a Bitmap Join Index)

--建一个bitmap join index

CREATE BITMAP INDEX sales_c_state_bjix ON sales(customers.cust_state_province)

FROM sales, customers

WHERE sales.cust_id = customers.cust_id

LOCAL NOLOGGING COMPUTE STATISTICS;

即使用bitmap join index代替与表customerbitmap join

 

 

星型转换的限制

1、 下面的情况不支持星型转换

?  查询中使用hint

?  查询包含绑定变量

?  Fact table上的bitmap indexes太少

?  远程fact tables

?  Anti-joined tables

?  Fact table是一个unmerged view

?  Fact table是一个partitioned view

 

2、 优化器不选择star transformation的情况

?  表有一个好的单表访问路径

?  表太小不值得转换

 

3、临时表在下面情况下不适用star transformation

?  数据库read-only模式

?  Star query是串行事务的一部分

 



优化星型查询 

当你使用星型查询时,你需要考虑以下两点:

  1. 调整星型查询
  2. 使用星型转换

调整星型查询
为了获得星型查询的最佳性能,遵循一些基本准则是非常重要的:
  • 应该为事实表的每一个外键列都创建位图索引。
  • 初始化参数STAR_TRANSFORMATION_ENABLED应设置为TRUE。这将开启对星型查询的 重要优化功能。为了向下兼容,它在默认情况下设置为FALSE
当一个数据仓库满足这些条件,在数据仓库中运行的大多数星型查询将会使用被称为星形转换的查询执行策略。星型转换为星型查询提供了非常高效的查询性能。

使用星型转换

星型转换是依靠隐式重写(或转换)原始星型查询SQL的强大优化技术。最终用户不需要知道任何关于星形转换的细节。Oracle数据库的查询优化器会在合适的地方自动选择星型转换。

星型转换是一个查询转换,旨在高效执行星型查询。Oracle数据库使用两个基本阶段来处理星型查询。第一阶段是从事实表(结果集)精确地检索出必要的行。由于这种检索使用了位图索引,因此是非常高效的。第二阶段是将一阶段查到的结果集与维度表相结合。最终用户查询的一个例子是:“在西部和西南部地区的销售门店的最后三个季度,食品部门的销售额和利润是多少?”这是一个简单的星型查询。

使用位图索引的星型转换
星型转换的一个前提条件,即在事实表的每一个连接列上都有一个单列位图索引。这些连接列包括所有的外键列。
例如,sh示例模式下的sales表,分别在TIME_ID,CHANNEL_ID,CUST_ID,PROD_ID和promo_id列上建有位图索引。
考虑下面的星型查询:

点击(此处)折叠或打开

  1. SELECT ch.channel_class, c.cust_city, t.calendar_quarter_desc,
  2.    SUM(s.amount_sold) sales_amount
  3. FROM sales s, times t, customers c, channels ch
  4. WHERE s.time_id = t.time_id
  5. AND s.cust_id = c.cust_id
  6. AND s.channel_id = ch.channel_id
  7. AND c.cust_state_province = \'CA\'
  8. AND ch.channel_desc in (\'Internet\',\'Catalog\')
  9. AND t.calendar_quarter_desc IN (\'1999-Q1\',\'1999-Q2\')
  10. GROUP BY ch.channel_class, c.cust_city, t.calendar_quarter_desc;
该查询分两个阶段进行处理。在第一阶段,Oracle数据库使用事实表外键列的位图索引从事实表中找出并检索出必要的行。也就是说,Oracle数据库从事实表中检索结果集,从本质上是使用下面的查询:

点击(此处)折叠或打开

  1. SELECT ... FROM sales
  2. WHERE time_id IN
  3.   (SELECT time_id FROM times 
  4.    WHERE calendar_quarter_desc IN(\'1999-Q1\',\'1999-Q2\'))
  5.    AND cust_id IN
  6.   (SELECT cust_id FROM customers WHERE cust_state_province=\'CA\')
  7.    AND channel_id IN
  8.   (SELECT channel_id FROM channels WHERE channel_desc IN(\'Internet\',\'Catalog\'));
这是该算法的转换步骤,因为原始星型查询已被改造成子查询表示方式。访问事实表的这种方法利用了位图索引的优势。直观地说,在关系数据库中位图索引提供了基于集合的处理方案。Oracle实现了非常快速的方法去处理集合操作,如AND(交集),OR(并集),MINUS和COUNT。

在这个星形查询中,TIME_ID位图索引用于标识事实表中销售时间在1999年-Q1所有行的集合。这个集合被表示为位图(一个由1和0组成的字符串,用来表示事实表中的哪些行属于该集合)。

一个类似的位图检索对应sales事实表中1999年第二季度的的所有行。该位图的或操作用于合并Q1销售结果集与Q2销售结果集。

另外还将在客户维度,产品维度来完成集合操作。在星型查询处理的这一点上,有三个位图。每个位图对应于一个单独的维度表,并且每个位图代表了事实表中满足单独维度约束的行的集合。

这三个位图通过AND操作被合并成一个单独的位图。这个最终的位图表示了事实表中满足所有维度约束的行集合。这就是结果集,从评估查询所需的事实表行的确切集合。请注意,没有任何事实表中的实际数据被访问。所有这些操作完全依赖位图索引和维度表。因为位图索引的压缩数据表示,位图集合操作是非常高效的。

一旦确认了结果集,可以通过位图来访问sales表的实际数据。从事实表中仅仅检索需要的数据。在这一点上,Oracle数据库,有效地将所有维度表和事实表结合了起来。这种技术提供了优异的性能,因为Oracle数据库使用了一个逻辑的连接操作将所有维度表和事实表连接恰里,而不是将每个维度表与事实表分别进行连接。。

该查询的第二阶段是将事实表中的行(结果集)与维度表连接在一起。Oracle使用最有效的方法来访问和连接维度表。许多维度表非常小,并且全表扫描通常是针对这些维度表的最有效的访问方法。对于大尺寸的表,全表扫描可能不是最有效的访问方法。在前面的例子中,product.department列的位图索引可以用来快速识别在食品部门的所有产品。基于优化程序对每个维度表的大小和数据分布的判断,Oracle数据库的优化器会针对给定的维度表来自动确定哪种访问方法是最适合的。

对于每个维度表而言,具体连接方法(以及索引方法)同样将被优化器智能地确定。哈希连接往往是连接维度表最有效的算法。一旦连接了所有的维度表,最终的结果将返回到用户。从一个表中检索出匹配行,然后连接到另一个表的查询技术通常被称为半连接。

使用位图索引星型转换的执行计划
下面这个典型的执行计划是由带位图索引的星型转换生成的:

点击(此处)折叠或打开

  1. SELECT STATEMENT
  2.  SORT GROUP BY
  3.   HASH JOIN
  4.    TABLE ACCESS FULL CHANNELS
  5.    HASH JOIN
  6.     TABLE ACCESS FULL CUSTOMERS
  7.     HASH JOIN
  8.      TABLE ACCESS FULL TIMES
  9.      PARTITION RANGE ITERATOR
  10.       TABLE ACCESS BY LOCAL INDEX ROWID SALES
  11.        BITMAP CONVERSION TO ROWIDS
  12.         BITMAP AND
  13.          BITMAP MERGE
  14.           BITMAP KEY ITERATION
  15.            BUFFER SORT
  16.             TABLE ACCESS FULL CUSTOMERS
  17.            BITMAP INDEX RANGE SCAN SALES_CUST_BIX
  18.          BITMAP MERGE
  19.           BITMAP KEY ITERATION
  20.            BUFFER SORT
  21.             TABLE ACCESS FULL CHANNELS
  22.            BITMAP INDEX RANGE SCAN SALES_CHANNEL_BIX
  23.          BITMAP MERGE
  24.           BITMAP KEY ITERATION
  25.            BUFFER SORT
  26.             TABLE ACCESS FULL TIMES
  27.            BITMAP INDEX RANGE SCAN SALES_TIME_BIX
在这个计划中,是通过一个由三个位图合并而来的位图访问路径来访问事实表。这三个位图是BITMAP MERGE根据行资源树的位图生成的。每个这样的行资源树是从子查询行资源树的位图键迭代行源组成,在这个例子是一个全表扫描。对于每一个这样的值,位图键迭代行源从位图索引中检索位图。在相应的事实表行通过这种访问路径被检索到以后,它们与维度表及临时表合并产生的查询结果。

 

使用位图连接索引的星型转换

除了位图索引,您可以在星型转换中使用位图连接索引。假设你有以下附加索引结构:

 

点击(此处)折叠或打开

  1. CREATE BITMAP INDEX sales_c_state_bjix
  2. ON sales(customers.cust_state_province)
  3. FROM sales, customers
  4. WHERE sales.cust_id = customers.cust_id
  5. LOCAL NOLOGGING COMPUTE STATISTICS;


使用位图连接索引的星型查询和之前的例子非常相似,唯一的区别是在星型查询的第一阶段,Oracle利用连接索引,而不是一个单表位图索引,去访问顾客数据。

 

使用位连接图索引星型转换的执行计划
下面这个典型的执行计划是由带位连接图索引的星型转换生成的:

点击(此处)折叠或打开

  1. SELECT STATEMENT
  2.  SORT GROUP BY
  3.   HASH JOIN
  4.    TABLE ACCESS FULL CHANNELS
  5.    HASH JOIN
  6.     TABLE ACCESS FULL CUSTOMERS
  7.     HASH JOIN
  8.      TABLE ACCESS FULL TIMES
  9.      PARTITION RANGE ALL
  10.       TABLE ACCESS BY LOCAL INDEX ROWID SALES
  11.        BITMAP CONVERSION TO ROWIDS
  12.         BITMAP AND
  13.          BITMAP INDEX SINGLE VALUE SALES_C_STATE_BJIX
  14.          BITMAP MERGE
  15.           BITMAP KEY ITERATION
  16.            BUFFER SORT
  17.             TABLE ACCESS FULL CHANNELS
  18.            BITMAP INDEX RANGE SCAN SALES_CHANNEL_BIX
  19.          BITMAP MERGE
  20.           BITMAP KEY ITERATION
  21.            BUFFER SORT
  22.             TABLE ACCESS FULL TIMES
  23.            BITMAP INDEX RANGE SCAN SALES_TIME_BIX


这个执行计划和前面相比,区别在于使用位图索引扫描顾客维度的那一部分没有子查询。这是因为在customer.cust_state_province的连接述语信息已经满足了位图连接索引sales_c_state_bjix。


Oracle如何选择使用星型转换

优化器可以生成并保存一个未经转换的最优执行计划。如果星型转换被启用,优化器将尝试将其应用到查询;如果适用,则产生一个使用转换查询的最优执行计划。基于这两个版本的执行计划,优化器通过比较二者的成本估算,然后决定使用经过转换的最优执行计划或者是未经转换的版本。

 

如果查询需要访问事实表中的大部分行,最好使用全表扫描,而不是使用星型转换查询。但是,如果维度表的约束谓词具有充分的可选性,也就是说只会从事实表中检索很小一部分数据,那么基于转换的执行计划很有可能会更好。

 

需要注意的是,优化器会根据许多标准判断,在它任务合理的情况下才会根据维度表生成子查询。Oracle优化器并不保证为所有维度表生成子查询。基于表和查询的特性,优化器还可以决定该转换是否值得被应用到特定查询中。在这种情况下,优化器将会使用最优计划。

 

使用星型转换的限制条件

具有任何以下特征的表均不支持星型转换:

?查询使用了与位图访问路径不兼容的表提示(hint)

?查询包含绑定变量

?表没有位图索引。事实表的列必须有位图索引,优化器才能创建子查询。

?远程事实表。然而,子查询中允许使用远程维度表。

?反连接的表

?已经在子查询中用作维度表的表

?表是unmerged视图,并且不是分区视图

?事实表是unmerged视图

?事实表是分区视图


在以下场景优化器可能不会选择星型转换:

?表具有良好的单表访问路径

?表太小,不值得进行转换

 

此外,在下列条件下星型转换不使用临时表:

?数据库处于只读模式

?星型查询是串行化事务的一部分



Oracle优化器:星型转换

>>>>

>>>>>>

>>

   

>>




 

 


  
  1. >    
  2.     
  3.      
  4.   
  5.                       
  6.     
  7.            
  8.                  
  9.                     
  10.                 
  11.                 
  12.              
  13.             
  14.             
  15.             
  16.             
  17.              
  18.   
  19.                       
  20.     
  21.                  
  22.                   
  23.                
  24.                     
  25.            
  26.        
  27.                     




  
  1. >     
  2.   
  3.                            
  4.     
  5.           



  
  1. >   
  2.        
  3.       
  4.        
  5.            
  6.        
  7.        
  8.          
  9.        
  10.         
  11.         
  12.        
  13. >   
  14.   
  15.                  
  16.     
  17.                      
  18.                         
  19.                        
  20.                           
  21.                         
  22.                           
  23.                       
  24.                       
  25.                          
  26.                     
  27.                           
  28.   
  29.                  
  30.     
  31.                       
  32.                         
  33.                        
  34.                       
  35.                      
  36.                    
  37.                        
  38.                      
  39.                       
  40.                     
  41.                        
  42.   
  43.                  
  44.     
  45.                         
  46.                           
  47.   
  48.   
  49.   
  50.   
  51.   
  52.   
  53.      
  54.   
  55.   
  56.                                            
  57.   
  58.                                                       
  59.                                                           
  60.                                                         
  61.                                                     
  62.                                                           
  63.                                                            
  64.                                                        
  65.                                                             
  66.                                                             
  67.                                                      
  68.                                   
  69.                                            
  70.   
  71.   
  72.        
  73.   
  74.   
  75.        
  76.           
  77.             
  78.          
  79.         
  80.        
  81.   
  82.   
  83.   
  84.   
  85.            
  86.             
  87.             
  88.             
  89.            
  90.                 
  91.              
  92.              
  93.            
  94.            
  95.           
  96.   
  97.      
  98.   
  99.     
  100.   
  101.       



  
  1. >      
  2.   
  3.      

  
  1.    
  2.       
  3.        
  4.            
  5.        
  6.        
  7.          
  8.        
  9.         
  10.         
  11.         
  12.   
  13.                  
  14.     
  15.                      
  16.                         
  17.                        
  18.                           
  19.                         
  20.                           
  21.                       
  22.                       
  23.                          
  24.                     
  25.                           
  26.   
  27.                  
  28.     
  29.                       
  30.                         
  31.                        
  32.                       
  33.                      
  34.                    
  35.                        
  36.                      
  37.                       
  38.                     
  39.                        
  40.   
  41.                  
  42.     
  43.                         
  44.                           
  45.   
  46.   
  47.   
  48.   
  49.   
  50.   
  51.      
  52.   
  53.   
  54.                                                    
  55.   
  56.                                                                   
  57.                                                                                 
  58.                                                                       
  59.                                                                  
  60.                                                                       
  61.                                                                         
  62.                                                                          
  63.                                                                   
  64.                                                                 
  65.                                                                       
  66.                                                       
  67.                                                               
  68.                                                                                      
  69.                                                                                        
  70.                                                                                     
  71.                                                                                         
  72.                                                                        
  73.                                                           
  74.                                                                                        
  75.                                                                                     
  76.                                                                                         
  77.                                                                  
  78.                                                          
  79.                                                                                        
  80.                                                                                     
  81.                                                                                         
  82.                                                        
  83.                                                          
  84.                                                          
  85.                                                        
  86.   
  87.   
  88.        
  89.   
  90.   
  91.        
  92.        
  93.        
  94.           
  95.             
  96.        
  97.       
  98.          
  99.             
  100.       
  101.       
  102.   
  103.   
  104.   
  105.            
  106.   
  107.   
  108.   
  109.   
  110.          
  111.            
  112.            
  113.             
  114.          
  115.                 
  116.              
  117.              
  118.            
  119.            
  120.           


  
  1.     
  2.      
  3.      
  4.     
  5.      
  6.      
  7.      
  8.    
  9.       
  10.       
  11.       
  12.     
  13.    
  14.       
  15.       
  16.      
  17.     
  18.    
  19.       
  20.       
  21.      
  22.         
  23.         
  24.     
  25.                   
  26.                   
  27.                
  28.       
  29.              
  30.    
  31.      
  32.      
  33.     
  34.     



  1.  

  
  1.     
  2.      
  3.      
  4.   
  5.     
  6.             
  7.        
  8.        
  9.        
  10.       
  11.        
  12.        
  13.      
  14.       
  15.                  
  16.          
  17.         
  18.       
  19.      
  20.       
  21.           
  22.          
  23.         
  24.         
  25.       
  26.      
  27.       
  28.           
  29.          
  30.         
  31.        
  32.           
  33.           
  34.       
  35.      
  36.      
  37.      
  38.     
  39.       
  40.    
  41.      
  42.      
  43.     
  44.     





&

           

img_e3029f287d989cd04bd75432ecc1c172.png
DBA笔试面试讲解群1
DBA笔试面试讲解群2
欢迎与我联系



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转载] python循环中break、continue 、exit() 、pass的区别

参考链接: Python中的循环和控制语句(continue, break and pass) 1、break:跳出循环,不再执行 用在while和for循环中 用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句 如果…

JavaScript | 声明数组并使用数组索引分配元素的代码

Declare an array, assign elements by indexes and print all elements in JavaScript. 声明一个数组&#xff0c;通过索引分配元素&#xff0c;并打印JavaScript中的所有元素。 Code: 码&#xff1a; <html><head><script>var fruits [];fruits[0]"…

[转载] Python入门(输入/输出、数据类型、条件/循环语句)

参考链接&#xff1a; Python中的循环技术 在介绍之前我们先来看看计算机的三个根本性基础&#xff1a; 1.计算机是执行输入、运算、输出的机器 2.程序是指令和数据的集合 3.计算机的处理方式有时与人们的思维习惯不同 &#xff08;以上是引自《计算机是怎样跑起来的》…

第5章 函数与函数式编程

第5章 函数与函数式编程 凡此变数中函彼变数者&#xff0c;则此为彼之函数。 ( 李善兰《代数学》) 函数式编程语言最重要的基础是λ演算&#xff08;lambda calculus&#xff09;&#xff0c;而且λ演算的函数可以传入函数参数&#xff0c;也可以返回一个函数。函数式编程 (简称…

mcq 队列_人工智能能力问答中的人工智能概率推理(MCQ)

mcq 队列1) Which of the following correctly defines the use of probabilistic reasoning in AI systems? In situations of uncertainty, probabilistic theory can help us give an estimate of how much an event is likely to occur or happen.It helps to find the pr…

[转载] Python中的xrange和range的区别

参考链接&#xff1a; Python中的range()和xrange() 在python2 中 range(start,end,step)返回一个列表&#xff0c;返回的结果是可迭代对象&#xff0c;但不是迭代器。iter()转化为列表迭代器。xrange()返回的是一个序列&#xff0c;他也是可迭代对象&#xff0c;但不是迭代…

Kubernetes基础组件概述

本文讲的是Kubernetes基础组件概述【编者的话】最近总有同学问Kubernetes中的各个组件的相关问题&#xff0c;其实这些概念内容在官方文档中都有&#xff0c;奈何我们有些同学可能英文不好&#xff0c;又或者懒得去看&#xff0c;又或者没有找到&#xff0c;今天有时间就专门写…

c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序

c语言将链表写入二进制文件Problem statement: Write a C program to convert a binary tree into a single linked list by traversing level-wise. 问题陈述&#xff1a;编写一个C程序&#xff0c;通过逐级遍历将二进制树转换为单个链表 。 Example: 例&#xff1a; The ab…

[转载] C Primer Plus 第6章 C控制语句 6.16 编程练习及答案

参考链接&#xff1a; 用Python打印金字塔图案的程序 2019独角兽企业重金招聘Python工程师标准>>> 1、编写一个程序&#xff0c;创建一个具有26个元素的数组&#xff0c;并在其中存储26个小写字母。并让该程序显示该数组的内容。 #include int main (void) { …

C# String和string的区别

C#中同时存在String与string MSDN中对string的说明&#xff1a; string is an alias for String in the .NET Framework。string是String的别名而已&#xff0c;string是c#中的类&#xff0c;String是Framework的类&#xff0c;C# string 映射为 Framework的 String。如果用str…

要求用户在Python中输入整数| 限制用户仅输入整数值

input() function can be used for the input, but it reads the value as a string, then we can use the int() function to convert string value to an integer. input()函数可用于输入&#xff0c;但它将值读取为字符串&#xff0c;然后可以使用int()函数将字符串值转换为…

[转载] python——if语句、逻辑运算符号

参考链接&#xff1a; 用Python链接比较运算符 1.if条件判断语句&#xff1a; if 要判断的条件(True): 条件成立的时候&#xff0c;要做的事情 elif 要判断的条件(True): .... elif 要判断的条件(True): .... else: 条件不成立的时候要做的事情 示例&#xff1a; 判断学生…

洛谷 P2689 东南西北【模拟/搜索】

题目描述 给出起点和终点的坐标及接下来T个时刻的风向(东南西北)&#xff0c;每次可以选择顺风偏移1个单位或者停在原地。求到达终点的最少时间。 如果无法偏移至终点&#xff0c;输出“-1”。 输入输出格式 输入格式&#xff1a; 第一行两个正整数x1,y1&#xff0c;表示小明所…

单链表遍历_单链表及其遍历实现的基本操作

单链表遍历单链表 (Single linked list) Single linked list contains a number of nodes where each node has a data field and a pointer to next node. The link of the last node is to NULL, indicates end of list. 单个链表包含许多节点&#xff0c;其中每个节点都有一…

[转载] python中for语句用法_详解Python中for循环的使用_python

参考链接&#xff1a; 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 “探索 Python&#xff0c;第 5 部分&#xff1a;用 Python 编程” 一文讨论了 if 语句和…

windows 软链接的建立及删除

在windows服务器上有时有这样的需求&#xff0c;你的文件在f:\test中&#xff0c;但由于其它原因用户访问的是e:\test&#xff0c;如果又希望e:\test 中的文件与f:\test的保持同步&#xff0c;除了用同步软件来做外&#xff0c;可以用windows 的文件夹映射来做 cmd: mklink /J …

8086简单的指令流水线_在8086微处理器中执行流水线的指令和概念的步骤

8086简单的指令流水线Any computer or machine works according to some instructions. These instructions are responsible for all the work that the machine does. But how does a machine work to understand and execute that instruction? 任何计算机或机器都按照某些…

[转载] 使用Python编写打字训练小程序

参考链接&#xff1a; 在Python中切换大小写(替换) 你眼中的程序猿 别人眼中的程序猿&#xff0c;是什么样子&#xff1f;打字如飞&#xff0c;各种炫酷的页面切换&#xff0c;一个个好似黑客般的网站破解。可现实呢&#xff1f; 二指禅的敲键盘&#xff0c;写一行代码&#…

shell两个数字相乘_使用8086微处理器将两个16位数字相乘而不带进位

shell两个数字相乘Problem statement: 问题陈述&#xff1a; To perform multiplication operation between 2 16bit numbers with carry using 8086 Microprocessor. 使用8086微处理器在2个16位数字之间进行带进位的乘法运算。 Algorithm: 算法&#xff1a; Load the first…

Dwr 框架简单实例

Dwr 是一个 Java 开源库&#xff0c;帮助你实现Ajax网站。 它可以让你在浏览器中的Javascript代码调用Web服务器上的Java&#xff0c;就像在Java代码就在浏览器中一样。 Dwr 主要包括两部分&#xff1a; 在服务器上运行的 Servlet 来处理请求并把结果返回浏览器。 运行在浏览器…