当前位置: 澳门新濠3559 > 数据库 > 正文

Server中多次遇到开发人员提交过来的有性能问题

时间:2019-11-08 05:43来源:数据库
select * from test_smalltable a inner loop join test_bigtable b on a.id = b.id option(force order)GOselect * from test_bigtable a inner loop join test_smalltable b on a.id = b.id option(force order)GO 3,哈希连接(Hash Join, HJ卡塔尔
select * from test_smalltable a inner loop join test_bigtable b on a.id = b.id option(force order)
GO

select * from test_bigtable a inner loop join test_smalltable b on a.id = b.id option(force order)
GO

3,哈希连接(Hash Join, HJ卡塔尔

这种连接是在oracle 7.3未来引进的,从理论上的话比NL与SMJ越来越高速,并且只用在CBO优化器中。
相当小的row source被用来创设hash table与bitmap,第4个row source被用来被hansed,并与第一个row source生成的hash table实行相称,以便进行越来越连接。Bitmap被用来作为大器晚成种非常的慢的探究方法,来检查在hash table中是不是有合作的行。非常的,当hash table一点都不小而不能够生机勃勃体同时兼备在内部存款和储蓄器中时,这种查找方法尤其平价。这种连接格局也可以有NL连接中所谓的驱动表的定义,被塑造为hash table与bitmap的表为驱动表,当被营造的hash table与bitmap能被容纳在内部存款和储蓄器中时,这种连接方式的频率非常高。
HASH连接的例证:
  SQL> explain plan for
  select /*+ use_hash(emp) */ empno
  from emp, dept
  where emp.deptno = dept.deptno;
  Query Plan
  ----------------------------
  SELECT STATEMENT[CHOOSE] Cost=3
  HASH JOIN
Server中多次遇到开发人员提交过来的有性能问题的SQL,SQL中的JOIN的简洁解释。  TABLE ACCESS FULL DEPT
  TABLE ACCESS FULL EMP
要使哈希连接有效,供给设置HASH_JOIN_ENABLED=TRUE,缺省气象下该参数为TRUE,此外,不忘记了还要设置 hash_area_size参数,以使哈希连接高效运营,因为哈希连接会在该参数钦命大小的内部存款和储蓄器中运作,过小的参数会使哈希连接的品质比其余连接方式还要低。

终极,总计一下,在哪个种类景况下用哪类连接格局相比较好:

  • 排序 - - 合併连接(Sort Merge Join, SMJ卡塔尔:
    a卡塔尔对于非等值连接,这种连接方式的功用是比较高的。
    b卡塔 尔(英语:State of Qatar)要是在关系的列上都有目录,效果越来越好。
    c卡塔 尔(英语:State of Qatar)对于将2个一点都不小的row source做连接,该连接形式比NL连接要好有的。
    d卡塔尔国不过只要sort merge重临的row source过大,则又会导致使用过多的rowid在表中询问数据时,数据库质量减少,因为过多的I/O.
  • 嵌套循环(Nested Loops, NL卡塔尔:
    a卡塔 尔(英语:State of Qatar)若是driving row source(外界表卡塔尔超小,並且在inner row source(内部表卡塔尔国上有独一索引,或有高接纳性非独一索引时,使用这种办法能够博得较好的功能。
    b卡塔 尔(英语:State of Qatar) NESTED LOOPS有别的连接方式没有的的二个优点是:能够先回去已经一而再三翻五次的行,而不要等待全数的一连操作管理完才回到数据,那能够实现飞速的响适时间。
  • 哈希连接(Hash Join, HJ卡塔尔国:
    a卡塔 尔(阿拉伯语:قطر‎这种艺术是在oracle7后来引进的,使用了比较先进的连年理论,平常的话,其成效应该好于其它2种连接,不过这种连接只可以用在CBO优化器中,并且亟需安装合适的hash_area_size参数,能力博得较好的习性。
    b卡塔尔在2个比较大的row source之间总是时会拿到相对较好的频率,在贰个row source较时辰则能获得更加好的作用。
    c卡塔尔国只可以用于等值连接中

Hash Join与NLJOIN及MSJOIN

一、NLJOIN
对于被连接的数额子集不大的气象,nested loop连接是个较好的抉择。nested loop便是扫描二个表,每读到一条记下,就依附目录去另一个表里面查找,未有索引平常就不会是 nested loops。
貌似在nested loop中, 驱动表满意条件结果集十分的小,被驱动表的总是字段要有目录,那样就走nstedloop。借使驱动表重返记录太多,就不合乎nested loops了。即使三翻五次字段未有索引,则契合走hash join,因为无需索引。
Inner table被Outer table驱动,outer table再次来到的每生龙活虎行都要在inner table中查找到与之合作的行。
Outer table: 小表、驱动表
Inner table: 被驱动表、大表 (可用ordered提醒来改良CBO暗许的驱动表,可用USE_NL(table_name1 table_name2)提示来强制行使nested loop。)
二、HSJOIN
Hash join是CBO 做大数据集连接时的常用形式。优化器扫描小表(或数据源卡塔尔,利用连接键(也等于借助连年字段计算hash 值卡塔尔在内存中创造hash表,然后扫描大表,每读到一条记下就来探测hash表三次,寻觅与hash表相配的行。
当小表能够全方位放入内部存储器中,其开销贴近全表扫描五个表的资金财产之和。假如表极大无法一心归入内部存款和储蓄器,那时候优化器会将它划分成多少分歧的分区,不可能归入内部存款和储蓄器的意气风发对就把该分区写入磁盘的有时段,当时要有十分大的有的时候段进而尽量升高I/O 的习性。有时段中的分区都亟需换进内部存储器做hash join。当时花费临近于全表扫描小表+分区数*全表扫描大表的代价和。
至于五个表都进行分区,其受益是足以接收parallel query,正是七个进度同一时候对分歧的分区实行join,然后再统黄金年代。可是复杂。
使用hash join时,HASH_AREA_SIZE初叶化参数必得丰裕的大,假使是9i,Oracle提议采取SQL专门的学问区自动管理,设置WOEnclaveKAREA_SIZE_POLICY 为AUTO,然后调度PGA_AGGREGATE_TARGET即可。
以下标准下hash join恐怕有优势:
1.多少个高大的表之间的连接;
2.在叁个光辉的表和多个小表之间的连接.
(可用ordered提醒来改革CBO私下认可的驱动表,可用USE_HASH(table_name1 table_name2)提醒来强制行使hash join。)
三、MSJOIN
Sort merge join的操作日常分三步:
1.对连接的每一个表做table access full;
2.对table access full的结果根据连接键举行排序;
3.开展merge join对排序结果进行归拢。
Sort merge join质量支付差不离都在前两步。日常是在尚未索引的景色下,9i开班已经非常少现身了,因为其排序费用高,多数为hash join取代了。 Usually, MSJOIN is used between 2 huge tables.
万般状态下Hash join的效应都比Sort merge join要好,不过生龙活虎旦行源已经被排过序,在施行sort merge join时无需再排序了,那时sort merge join的天性会优于hash join。
在全表扫描美金引范围扫描再通过rowid举办表访谈更可取的景观下,sort merge join会比nested loops品质更佳。
DB2的大器晚成对版本现身了不当接受MSJOIN的主题材料(应该使用HSJOIN或NLJOIN的事态卡塔 尔(英语:State of Qatar)。
由此立异DB2的fix及将DB2_REDUCED_OPTIMIZATION变量设为CAP OFF来修正。

Join与NLJOIN及MSJOIN 黄金时代、NLJOIN 对于被一连的数量子集超小的景况,nested loop连接是个较好的拈轻怕重。nested loop正是扫描多个表,每读到一条记...

create table test_smalltable
(
    id int identity(1,1) primary key,
    otherColumns char(500)
)

create table test_bigtable
(
    id int identity(1,1) primary key,
    otherColumns char(500)
)


declare @i int = 0
while @i<100000
begin
    if @i<10000
    begin
        insert into test_smalltable values (NEWID())
    end
    insert into test_bigtable values (NEWID())
    set @i = @i + 1
end

2,嵌套循环(Nested Loops, NL卡塔尔

本条再而三情势有驱动表(外界表卡塔尔国的概念。其实,该连接进度就是叁个2层嵌套循环,所以外层循环的次数越少越好,那相当于大家为何将小表或再次回到相当的小row source的表作为驱动表(用于外层循环卡塔尔的理论依附。不过那几个理论只是日常辅导原则,因为根据那几个理论并不可能总保险使语句发生的I/O次数起码。偶然不遵从这一个理论依赖,反而会拿走越来越好的功效。假如使用这种方法,决定使用哪个表作为驱动表很要紧。一时假诺驱动表选用不科学,将会促成说话的特性非常糟糕、相当差。
中间连接进程:
Row source1的Row 1 —— Probe ->Row source 2
Row source1的Row 2 —— Probe ->Row source 2
Row source1的Row 3 —— Probe ->Row source 2
……。
Row source1的Row n —— Probe ->Row source 2
从里边连接过程来看,须求用row source第11中学的每大器晚成行,去相称row source第22中学的全体行,所以那个时候维持row source1竭尽的小与快快的探访row source2(平时经过索引达成卡塔尔国是震慑那一个再三再四效能的关键难点。那只是理论引导原则,指标是使全部连接操作发生起码的物理I/O次数,而且借使遵从那一个条件,平时也会使总的物理I/O数起码。不过黄金时代旦不遵循那个引导规范,反而能用更加少的物理I/O完成连接操作,那尽管违反引导标准呢!因为起码的大体I/O次数才是我们应当依照的确实的辅导规范,在后头的实际案例剖析中就交由那样的例子。
在上头的连接进度中,我们称Row source1为驱动表或外界表。Row Source2被叫做被探查表或内部表。
在NESTED LOOPS连接中,Oracle读取row source第11中学的每少年老成行,然后在row sourc第22中学检查是否有合作的行,全部被相配的行都被放到结果聚集,然后管理row source第11中学的下生龙活虎行。那一个进度一向持续,直到row source第11中学的全体行都被拍卖。这是从连接操作中得以得到第3个相称行的最快的诀要之风姿罗曼蒂克,那连串型的连天能够用在急需火速响应的话语中,以响应速度为第一指标。
后生可畏经driving row source(外部表卡塔尔国十分小,况兼在inner row source(内部表卡塔尔国上有独一索引,或有高接收性非独一索引时,使用这种方法能够获得较好的频率。NESTED LOOPS有其余连接格局未有的的三个独特之处是:能够先回到已经接二连三的行,而不要等待全数的接连操作处理完才回来数据,那能够完成快捷的响适那个时候候间。
若果不选择并行操作,最棒的驱动表是这些使用了where 限定规范后,能够回到相当少行数据的的表,所以大表也或然称为驱动表,关键看限制规范。对于彼此查询,我们平常挑选大表作为驱动表,因为大表能够充足利用并行功效。当然,不经常对查询利用并行操作并不一定会比查询不接纳并行操作效用高,因为最后大概每一个表独有少之又少的行切合节制条件,并且还要看你的硬件配置是还是不是能够协理相互(如是还是不是有多个CPU,几个硬盘调节器卡塔尔国,所以要具体难点具体相比。
NL连接的例证:
  SQL> explain plan for
  select a.dname,b.sql
  from dept a,emp b
  where a.deptno = b.deptno;
  Query Plan
  -------------------------
  SELECT STATEMENT [CHOOSE] Cost=5
  NESTED LOOPS
  TABLE ACCESS FULL DEPT [ANALYZED]
  TABLE ACCESS FULL EMP [ANALYZED]

 

适用范围

  • Nested loop join:
      适用于outer table(有的地点叫Mastertable)的记录集少之甚少(<10000卡塔尔并且innertable(有的地点叫Detailtable卡塔 尔(英语:State of Qatar)索引选用性较好的情事下(inner table要有index卡塔 尔(阿拉伯语:قطر‎。
      inner table被outer table驱动,outertable再次来到的每黄金时代行都要在innertable中追寻到与之相称的行。当然也可以用O宝马X3DERED提示来改变CBO暗中认可的驱动表,使用USE_NL(table_name1table_name2)然而强制CBO施行嵌套循环连接。
      cost = outer access cost + (inner access cost *outercardinality)
  • Sort merge join:
      用在多少未有索引不过曾经排序的气象下。
      常常状态下hash join的功用都比Sortmergejoin要好,然则意气风发旦行源已经被排过序,在实行排序归并连接时不要求再排序了,那个时候Sort mergejoin的性质会优于hashjoin。能够运用USE_MERGE(table_name1 table_name2)来强制行使Sortmergejoin。
      cost = (outer access cost * # of hash partitions) + inneraccesscost
  • Hash join:
      适用于多少个表的数据量差距超大。但需求专心的是:如若HASH表太大,不能够一回协会在内部存款和储蓄器中,则分为若干个partition,写入磁盘的temporarysegment,则会多贰个I/O的代价,会下落效用,那时亟需有十分的大的temporarysegment进而尽量进步I/O的脾气。
      可以用USE_HASH(table_name1table_name2)提醒来强制行使散列连接。假若使用散列连HASH_AREA_SIZE最初化参数必得丰硕的大,假若是9i,Oracle提议利用SQL职业区自动管理,设置WOKoleosKAREA_SIZE_POLICY为AUTO,然后调解PGA_AGGREGATE_TARGET即可。
      也足以选拔HASH_JOIN_ENABLED=FALSE(默以为TRUE卡塔尔国强制不利用hash join。
      cost = (outer access cost * # of hash partitions) + inneraccesscost

那正是说当时,在直面复杂的查询的时候,SQL Server怎么着评估每种表经过各个条件筛选后的结果集的轻重?
当然是遵照where 前边的筛选规范(或然是on 后边的加的筛选标准卡塔 尔(英语:State of Qatar),难点就来了,where 前边也许on前边的筛选典型,怎样又遵照什么来提供三个差不离的筛选后的结果集?
不错,又是总结音讯!

1,排序 - - 合併连接(Sort Merge Join, SMJ卡塔尔国

其间连接进程:
1卡塔 尔(英语:State of Qatar)首先生成row source1要求的多寡,然后对这个多少依据连接操作关联列(如A.col3卡塔尔实行排序。
2卡塔 尔(阿拉伯语:قطر‎随后生成row source2要求的数额,然后对这几个数量遵照与sort source1对应的接连几日操作关联列(如B.col4卡塔尔举办排序。
3卡塔尔国最终两侧已排序的行被放在一齐实践统生龙活虎操作,将在2个row source依照连接条件连接起来
上边是连连步骤的图纸表示:
MERGE
/
SORT SORT
| |
Row Source 1 Row Source 2
比方row source已经在三翻五次关联列上被排序,则该连接操作就没有须求再进行sort操作,那样能够大大进步这种连接操作的连天速度,因为排序是个非常费能源的操作,非常是对于极大的表。预先排序的row source满含曾经被索引的列(如a.col3或b.col4上有索引卡塔尔国或row source已经在近年来的步调中被排序了。尽管合併几个row source的历程是串行的,但是能够互相访谈那七个row source(如互相读入数据,并行排序卡塔 尔(英语:State of Qatar)。
SMJ连接的例子:
SQL> explain plan for
select /*+ ordered */ e.deptno, d.deptno
from emp e, dept d
where e.deptno = d.deptno
order by e.deptno, d.deptno;
Query Plan


SELECT STATEMENT [CHOOSE] Cost=17
MERGE JOIN
SORT JOIN
TABLE ACCESS FULL EMP [ANALYZED]
SORT JOIN
TABLE ACCESS FULL DEPT [ANALYZED]
排序是一个吃力、费财富的操作,极其对于大表。基于那几个缘故,SMJ平日不是一个特意实用的总是格局,可是假若2个row source都早已先行排序,则这种连接形式的频率也是蛮高的。

 总结:

基本概念

  • Nested loop join:
    Outer table中的每后生可畏行与inner table中的相应记录join,雷同多个嵌套的大循环。
  • Sort merge join:
    将多少个表排序,然后再张开join。
  • Hash join:
    将多少个表中非常的小的叁个在内部存款和储蓄器中布局三个Hash 表(对JoinKey卡塔尔国,扫描另三个表,相似对JoinKey举行Hash后探测是或不是能够join,寻觅与之相称的行。
    一张小表被hash在内部存款和储蓄器中。因为数据量小,所以那张小表的大部多少现已驻入在内部存款和储蓄器中,剩下的为数不佳些个据被停放在临时表空间中;
    每读取大表的一条记下,就和小表中内部存款和储蓄器中的多少开展相比较,假若适合,则随时输出数据(也便是说未有读取有时表空间中的小表的数据卡塔 尔(英语:State of Qatar)。而要是大表的数量与小表中不经常表空间的数量相切合,则不直接出口,而是也被储存有时表空间中。
    当大表的具有数据都读取达成,将有的时候表空间中的数据以其输出。要是小表的数据量足够小(小于hashareasize卡塔 尔(英语:State of Qatar),那全部数据就都在内部存款和储蓄器中了,可防止止对不经常表空间的读写。
    如若是并行景况下,前边中的第2步就变成如下了:每读取一条大表的记录,和内部存款和储蓄器中型Mini表的数量相比,要是切合先做join,而不直接出口,直到整张大表数据读取完结。借使内存丰盛,Join好的数码就保存在内存中。不然,就封存在一时表空间中。

方今在SQL Server中数次相逢开垦职员提交过来的有总体性难点的SQL,其外界的由来是表之间去的驱动顺序变成的属性难点,
具体表今后(已消弭其余因素影响的气象下卡塔 尔(阿拉伯语:قطر‎,存储进程偶发性的施行时间大于预想,以致在调解的时候,直接在蕴藏进程的SQL语句中植入有些具体的参数,在性质上仍达不到预期的响合时间。
此类主题素材在裁撤了服务器能源因素,索引,锁,parameter sniff等布满难点未来,确认知是表之间的驱动顺序产生的,因为在品味sql语句的末梢加上option(force order)之后,质量连忙进步。
日常说来状态下,表之直接连的时候是利用“小表驱动大表”是生机勃勃种周旋相当的红速的点子,也即在loop join的时候,先循环小表,通过轮回驱动大表,然后发生查询结果集。
该质量表面上看,是表之间的驱动顺序依次形成的,在威吓叁个驱动顺序之后,质量有极度醒指标升官,
只是再进一层思虑,为什么暗中同意情状下,SQL Server没有采用贰个理之当然的驱动顺序?
为此本文就差非常少解说那七个难点:
1卡塔 尔(英语:State of Qatar)为啥表之间的驱动顺序会影响属性?
2卡塔尔国为啥SQL Server在一些意况下并未接纳出正确的驱动顺序?

频率相比较

Hashjoin的主要能源消耗在于CPU(在内部存款和储蓄器中创建不经常的hash表,并张开hash总结卡塔 尔(英语:State of Qatar),而mergejoin的能源消耗主要在于磁盘I/O(扫描表或索引卡塔 尔(阿拉伯语:قطر‎。在相互系统中,hashjoin对CPU的损耗尤其明确。所以在CPU恐慌时,最棒节制使用hashjoin。
在当先47%气象下,hash join功效比别的join形式功能更加高:
在Sort-Merge Join(SMJ),两张表的数据都急需先做排序,然后做merge。由此功效相对最差;
Nested-Loop Join(NL)效用比SMJ越来越高。非常是当驱动表的数据量超大(集的势高卡塔尔时。那样能够相互扫描内表。
Hash join功用最高,因为要是对两张表扫描一次。

MySQL中Join算法完毕原驾驭析
通往质量优化的JOIN方法求证
SQL中的JOIN的简短解释

  图片 1图片 2

 

 

为啥SQL Server在某个境况下并未有选抽取不错的驱动顺序

由于该难点的特殊性,很难造case,就不造case演示了,截五个实在境遇的自己检查自纠缠果。实际意况中,驱动顺序对质量发生的影响,也许是从0.5秒到10秒的间隔,也或许是1分钟到10分钟的反差

本文出处: 
(保留出处并不是什么原创小说职责,本身拙作还远远达不到,仅仅是为着链接到原作,因为三番五次对也许存在的一些破绽非常多进行改进或补充,无她卡塔尔国

  当然,加option(force order)的时候,要潜心写法本人的是或不是将小表放在了最前面,
  在纷纭的状态下,纵然是驱动顺序形成的主题材料,不过加option(force order)并不一定好使,因为多表连接的时候,根据书写的措施强制驱动,也不确定正好正是五个道理当然是这样的的驱动顺序
  以致有更要紧的标题现身,参谋:,由此不提议乱用option(force order)

 

 

那么为何,生机勃勃开头波及的标题,为啥SQL Server在一些景况下并未有选用出正确的驱动顺序还有大概会现出?
实介意况中,SQL的写法相当少好似此轻便的,更加多的时候是在表连接之后,有丰裕多采的where条件。
上边说了,大表与小表的概念,不仅是“表”级其他定义,越来越多的是依照筛选标准过滤之后的结果(行数,恐怕大小卡塔 尔(阿拉伯语:قطر‎的定义,
举例,如下SQL,在where条件上恐怕助长种种筛选标准,举个例子可能是相像于type类型的,恐怕是岁月节制的,还也会有超级大可能率多个表上皆有几许筛选规范。

导致此主题素材的缘由,大概有部分麻烦驾驭,双巡回嵌套,哪个人在外什么人在内还应该有间距,表面上看不都以相仿的?其实不然。
loop join是使用的近乎如下双循环嵌套的法子来试行的,直至外层的表循环甘休,循环(查询卡塔尔完成
foreache(outer_row in outer_table)
{
  foreache(internal_row in internal_table)
  {
    if (outer_row.key = internal_row.key)
    {
      --输出结果
    }
  }
}

未来难题就一清二楚了四起,SQL Server凭借总括音讯,在通过各类(或然是相比复杂卡塔 尔(英语:State of Qatar)的筛选规范过滤之后,获得一个“它自个儿感觉的预估大小的结果集”,然后依照这么些结果集来决定驱动顺序。
SQL Server在“它协和以为的预估大小的结果集”的基础上实行相同于“小表驱动大表”的不二秘技进行演算(当然不止是loop join,这里暂不说别的的join形式卡塔 尔(英语:State of Qatar),
生机勃勃经这几个预估的结果集的轻重有一点都不小的引用误差,就算是抽样误差比非常小,可是能够退换确实的“小表驱动大表”的措施开展览演出算,第一个难点就涌出了。
由此,说来讲去,错误的驱动顺序,本质上在运用总括新闻进行预估的时候,因为总结信息不充分规范大概预测度法自个儿的主题素材。   
参考:
导致SQL Server错误地用大表驱动的不二等秘书技来实行运算,相像难点就应际而生了。

为什么表之间的驱动顺序会耳熏目染属性?

然则要小心这里的大表与小表,不独有是“表”品级的定义,因为实际中SQL并未那样轻易,还足以是凭仗筛选规范过滤之后的结果的定义,那也是引出第一个难点的关键点。

  图片 3

在测量检验表写入数据产生以往,使用一下多个SQL,通过强制行使loop join的驱动顺序的措施来观看其IO处境

  在上述的测量试验中,假如不加查询提醒,实行安排的成形是跟表书写的逐大器晚成没有提到的,一下截图能够见见,书写顺序分化等,推行陈设依旧是同生机勃勃的。
  也便是说,在挥洒SQL语句的时候,大表在前依旧在后,寻常状态下是不影响试行布署的扭转的。

 如图,是四个SQL施行之后发生的IO音信,能够开采,因为多个表的驱动顺序不一致样,引致的逻辑IO大约差了二个数额级。

  面临较为复杂的询问和挑选标准的时候,尤其是在表中的数据相当的大的状态下,总计音讯改造的预估,以至预估发生的表之间的驱动顺序,会对质量发生相当大的影响。
  面临相符主题材料,要真正直接原因是怎样,根本原因是怎么着,如何急迅确认难题,又要怎么减轻和幸免,都是值得沉思的,也是做品质优化的时候要思谋的标题之黄金时代。

以上述测量检验为例,做三个简约的对照总计
万黄金年代外层是小表(1W行卡塔尔,外层循环1W次,分别对内层的大表(10W行卡塔 尔(阿拉伯语:قطر‎查询,然后甘休查询,也正是循环1W次,分别用Id查询内层表,
可以粗略地认为全体的代价是:1W+1W*10W = 11W,这里先忽视具体代价的单位
假使外层是大表(10W行卡塔 尔(阿拉伯语:قطر‎,外层循环10W次,分别对内层的小表(1W行卡塔 尔(阿拉伯语:قطر‎查询,然后甘休查询,也就是循环10W次,分别用Id查询内层表,
能够粗略地以为完全的代价是:10W+10W*1W = 20W,同理,这里也先忽视代价的单位
前段时间就很明白了,前面一个(小表驱动大表卡塔 尔(英语:State of Qatar)的代价是11W,前者(大表驱动小表卡塔尔国的代价是20W,因而,日常来讲,小表驱动大表是大器晚成种对峙较为高效的措施。

图片 4图片 5

先是演示一下表在连年的时候,驱动顺序对质量的熏陶,当中test_smalltable插入1W行数据,test_bigtable插入10W行测量检验数据,依次来表示小表与大表

select * from test_smalltable a 
inner join test_bigtable b on a.id = b.id 
where a.otherColumns = '' and b.otherColumns = '' and other filter condition

编辑:数据库 本文来源:Server中多次遇到开发人员提交过来的有性能问题

关键词: