国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

耗時(shí)3天,上億數(shù)據(jù)如何做到秒級(jí)查詢?

共 555字,需瀏覽 2分鐘

 ·

2020-08-18 01:09

點(diǎn)擊上方藍(lán)色“小哈學(xué)Java”,選擇“設(shè)為星標(biāo)

回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!

來源:sohu.gg/jIp59N


最近在忙著優(yōu)化集團(tuán)公司的一個(gè)報(bào)表。優(yōu)化完成后,報(bào)表查詢速度由從半小時(shí)以上(甚至查不出)到秒查的質(zhì)變。從修改 SQL 查詢語句邏輯到?jīng)Q定創(chuàng)建存儲(chǔ)過程實(shí)現(xiàn),花了我 3 天多的時(shí)間,在此總結(jié)一下,希望對(duì)朋友們有幫助。


數(shù)據(jù)背景


首先項(xiàng)目是西門子中國在我司實(shí)施部署的 MES 項(xiàng)目,由于項(xiàng)目是在產(chǎn)線上運(yùn)作(3 years+),數(shù)據(jù)累積很大。


在項(xiàng)目的數(shù)據(jù)庫中,大概上億條數(shù)據(jù)的表有 5 個(gè)以上,千萬級(jí)數(shù)據(jù)的表 10 個(gè)以上,百萬級(jí)數(shù)據(jù)的表,很多…

(歷史問題,當(dāng)初實(shí)施無人監(jiān)管,無人監(jiān)控?cái)?shù)據(jù)庫這塊的性能問題。PS:我剛?cè)肼毑痪谩?/span>

不多說,直接貼西門子中國的開發(fā)人員在我司開發(fā)的 SSRS 報(bào)表中的 SQL 語句:

select?distinct?b.MaterialID?as?matl_def_id,?c.Descript,?case?when?right(b.MESOrderID,?12)?'001000000000'?then?right(b.MESOrderID,?9)??
else?right(b.MESOrderID,?12)?end??as?pom_order_id,?a.LotName,?a.SourceLotName?as?ComLot,?
e.DefID?as?ComMaterials,?e.Descript?as?ComMatDes,?d.VendorID,?d.DateCode,d.SNNote,?b.OnPlantID,a.SNCUST
from??
(
????select?m.lotname,?m.sourcelotname,?m.opetypeid,?m.OperationDate,n.SNCUST?from?View1?m
????left?join?co_sn_link_customer?as?n?on?n.SNMes=m.LotName
????where?
????(?m.LotName?in?(select?val?from?fn_String_To_Table(@sn,',',1))?or?(@sn)?=?'')?and?
????(?m.sourcelotname?in?(select?val?from?fn_String_To_Table(@BatchID,',',1))?or?(@BatchID)?=?'')
????and?(n.SNCust?like?'%'+?@SN_ext?+?'%'?or?(@SN_ext)='')
)?a
left?join?
(
????select?*?from?Table1?where?SNType?=?'IntSN'
????and?SNRuleName?=?'ProductSNRule'
????and?OnPlantID=@OnPlant
)?b?on?b.SN?=?a.LotName
inner?join?MMdefinitions?as?c?on?c.DefID?=?b.MaterialID
left?join??Table1?as?d?on?d.SN?=?a.SourceLotName?
inner?join?MMDefinitions?as?e?on?e.DefID?=?d.MaterialID
where?not?exists?(
?select?distinct?LotName,?SourceLotName?from?ELCV_ASSEMBLE_OPS?
where?LotName?=?a.SourceLotName?and?SourceLotName?=?a.LotName
)?
and?(d.DateCode?in?(select?val?from?fn_String_To_Table(@DCode,',',1))?or?(@DCode)?=?'')
and?(d.SNNote??like?'%'+@SNNote+'%'?or?(@SNNote)?=?'')
and?((case?when?right(b.MESOrderID,?12)?'001000000000'?then?right(b.MESOrderID,?9)??
else?right(b.MESOrderID,?12)?end)?in?(select?val?from?fn_String_To_Table(@order_id,',',1))?or?(@order_id)?=?'')
and?(e.DefID?in?(select?val?from?fn_String_To_Table(@comdef,',',1))?or?(@comdef)?=?'')
--View1是一個(gè)嵌套兩層的視圖(出于保密性,實(shí)際名稱可能不同),里面有一張上億數(shù)據(jù)的表和幾張千萬級(jí)數(shù)據(jù)的表做左連接查詢
--Table1是一個(gè)數(shù)據(jù)記錄超過1500萬的表


這個(gè)查詢語句,實(shí)際上通過我的檢測和調(diào)查,在 B/S 系統(tǒng)前端已無法查出結(jié)果,半小時(shí),一小時(shí)...


因?yàn)槲抑苯釉?SQL 查詢分析器查,半小時(shí)都沒有結(jié)果。(原因是里面對(duì)一張上億級(jí)數(shù)據(jù)表和 3 張千萬級(jí)數(shù)據(jù)表做全表掃描查詢)


不由感慨,西門子中國的素質(zhì)(或者說責(zé)任感)就這樣?下面說說我的分析和走的彎路(思維誤區(qū)),希望對(duì)你也有警醒。

探索和誤區(qū)


首先相關(guān)表的索引,沒有建全的,把索引給建上。


索引這步完成后,發(fā)現(xiàn)情況還是一樣,查詢速度幾乎沒有改善。后來想起相關(guān)千萬級(jí)數(shù)據(jù)以上的表,都還沒有建立表分區(qū)。于是考慮建立表分區(qū)以及數(shù)據(jù)復(fù)制的方案。


這里有必要說明下:我司報(bào)表用的是一個(gè)專門的數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)從產(chǎn)線訂閱而來。就是常說的“讀寫分離”。


如果直接在原表上建立表分區(qū),你會(huì)發(fā)現(xiàn)執(zhí)行表分區(qū)的事物會(huì)直接死鎖。原因是:表分區(qū)操作本身會(huì)鎖表,產(chǎn)線還在推數(shù)據(jù)過來,這樣很容易“阻塞”,“死鎖”。


我想好的方案是:建立一個(gè)新表(空表,在新表上建好表分區(qū),然后復(fù)制數(shù)據(jù)過來。


正打算這么干。等等!我好像進(jìn)入了一個(gè)嚴(yán)重的誤區(qū)!


分析:原 SQL 語句和業(yè)務(wù)需求,是對(duì)產(chǎn)線的數(shù)據(jù)做產(chǎn)品以及序列號(hào)的追溯,關(guān)鍵是查詢條件里沒有有規(guī)律的”條件”(如日期、編號(hào)),貿(mào)然做了表分區(qū),在這里幾乎沒有意義!反而會(huì)降低查詢性能!

好險(xiǎn)!還是一步一步來,先做 SQL 語句分析。

對(duì)原 SQL 語句的分析


對(duì)原 SQL 語句的分析如下:
  • 查詢語句的 where 條件,有大量 @var in … or (@var =”) 的片段。

  • where 條件有 like ‘%’+@var+’%’。

  • where 條件有 case … end 函數(shù)。

  • 多次連接同一表查詢,另外使用本身已嵌套的視圖表,是不是必須,是否可替代?

  • SQL 語句有號(hào),視圖中也有號(hào)出現(xiàn)。


優(yōu)化設(shè)計(jì)


首先是用存儲(chǔ)過程改寫,好處是設(shè)計(jì)靈活。


核心思想是:用一個(gè)或多個(gè)查詢條件(查詢條件要求至少輸入一個(gè)得到臨時(shí)表,每個(gè)查詢條件如果查到集合,就更新這張臨時(shí)表,最后匯總的時(shí)候,只需判斷這個(gè)臨時(shí)表是否有值。


以此類推,可以建立多個(gè)臨時(shí)表,將查詢條件匯總。

這樣做目前來看至少兩點(diǎn)好處:
  • 省去了對(duì)變量進(jìn)行 =@var or (@var=”)的判斷。

  • 拋棄 SQL 拼接,提高代碼可讀性。


再有就是在書寫存儲(chǔ)過程,這個(gè)過程中要注意:
  • 盡量想辦法使用臨時(shí)表掃描替代全表掃描。

  • 拋棄 in 和 not in 語句,使用 exists 和 not exists 替代。

  • 和客戶確認(rèn),模糊查詢是否有必要,如沒有必要,去掉 like 語句。

  • 注意建立適當(dāng)?shù)?,符合場景的索引?/span>

  • 踩死 “*” 號(hào)。

  • 避免在 where 條件中對(duì)字段進(jìn)行函數(shù)操作。

  • 對(duì)實(shí)時(shí)性要求不高的報(bào)表,允許臟讀(with(nolock)。


存儲(chǔ)過程


如果想?yún)⒖純?yōu)化設(shè)計(jì)片段的詳細(xì)內(nèi)容,請(qǐng)參閱 SQL 代碼:

/**
?*?某某跟蹤報(bào)表
?**/

--exec?spName1?'','','','','','','公司代號(hào)'
CREATE?Procedure?spName1
???@MESOrderID?nvarchar(320),?--工單號(hào),最多30個(gè)
???@LotName?nvarchar(700),????--產(chǎn)品序列號(hào),最多50個(gè)
???@DateCode?nvarchar(500),???--供應(yīng)商批次號(hào),最多30個(gè)
???@BatchID?nvarchar(700),????--組裝件序列號(hào)/物料批號(hào),最多50個(gè)
???@comdef?nvarchar(700),?????--組裝件物料編碼,最多30個(gè)
???@SNCust?nvarchar(1600),????--外部序列號(hào),最多50個(gè)
???@OnPlant?nvarchar(20)??????--平臺(tái)
AS
BEGIN
????SET?NOCOUNT?ON;??
????/**
?????*?1)定義全局的臨時(shí)表,先根據(jù)六個(gè)查詢條件的任意一個(gè),得出臨時(shí)表結(jié)果
?????**/

????CREATE?TABLE?#FinalLotName
????(
????????LotName?NVARCHAR(50),???????--序列號(hào)
????????SourceLotName?NVARCHAR(50),?--來源序列號(hào)
????????SNCust?NVARCHAR(128)????????--外部序列號(hào)
????)
????--1.1
????IF?@LotName<>''
????BEGIN
????????SELECT?Val?INTO?#WorkLot?FROM?fn_String_To_Table(@LotName,',',1)
????????SELECT?LotPK,LotName?INTO?#WorkLotPK?FROM?MMLots?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkLot?b?WHERE?b.Val=MMLots.LotID)

????????--求SourceLotPK只能在這里求
????????SELECT?a.LotPK,a.SourceLotPK?into?#WorkSourcePK?FROM?MMLotOperations?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkLotPK?b?WHERE?b.LotPK=a.LotPK)?AND?a.SourceLotPK?IS?NOT?NULL

????????SELECT?a.LotPK,a.SourceLotPK,b.LotName?INTO?#WorkSourcePK2?FROM?#WorkSourcePK?a?JOIN?#WorkLotPK?b?ON?a.LotPK=b.LotPK

????????INSERT?INTO?#FinalLotName?SELECT?a.LotName,b.LotName?AS?SourceLotName,NULL?FROM?#WorkSourcePK2?a?JOIN?(SELECT?LotPK,LotName?FROM?MMLots?WITH(NOLOCK)?)?b?on?a.SourceLotPK=b.LotPK?--b的里面加不加WHERE?RowDeleted=0待確定
????????SELECT?a.LotName,a.SourceLotName,b.SNCust?INTO?#FinalLotNameX1?FROM?#FinalLotName?a?LEFT?JOIN?CO_SN_LINK_CUSTOMER?b?WITH(NOLOCK)?ON?a.LotName=b.SNMes
????????DELETE?FROM?#FinalLotName
????????INSERT?INTO?#FinalLotName?SELECT?LotName,SourceLotName,SNCust?FROM?#FinalLotNameX1
????END
????--1.2
????IF?@BatchID<>''
????BEGIN
????????SELECT?Val?INTO?#WorkSourceLot?FROM?fn_String_To_Table(@BatchID,',',1)
????????IF?EXISTS(SELECT?1?FROM?#FinalLotName)--如果@LotName也不為空
????????BEGIN
????????????SELECT?a.LotName,a.SourceLotName,a.SNCust?INTO?#FinalLotNameX2?FROM?#FinalLotName?a?WHERE?EXISTS(SELECT?1?FROM?#WorkSourceLot?b?WHERE?a.SourceLotName=b.Val)
????????????DELETE?FROM?#FinalLotName
????????????INSERT?INTO?#FinalLotName?SELECT?LotName,SourceLotName,SNCust?FROM?#FinalLotNameX2
????????END
????????ELSE?--@LotName條件為空
????????BEGIN
????????????SELECT?LotPK?AS?SourceLotPK,LotName?AS?SourceLotName?INTO?#2?FROM?MMLots?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkSourceLot?b?WHERE?b.Val=MMLots.LotID)
????????????SELECT?a.LotPK,a.SourceLotPK?into?#21?FROM?MMLotOperations?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#2?b?WHERE?b.SourceLotPK=a.SourceLotPK)
????????????SELECT?a.LotPK,a.SourceLotPK,b.SourceLotName?INTO?#22?FROM?#21?a?JOIN?#2?b?ON?a.SourceLotPK=b.SourceLotPK????
????????????INSERT?INTO?#FinalLotName?SELECT?b.LotName,a.SourceLotName,NULL?FROM?#22?a?JOIN?(SELECT?LotPK,LotName?FROM?MMLots?WITH(NOLOCK)?)?b?on?a.LotPK=b.LotPK?--b的里面加不加WHERE?RowDeleted=0待確定????
????????????SELECT?a.LotName,a.SourceLotName,b.SNCust?INTO?#FinalLotNameX21?FROM?#FinalLotName?a?LEFT?JOIN?CO_SN_LINK_CUSTOMER?b?WITH(NOLOCK)?ON?a.LotName=b.SNMes
????????????DELETE?FROM?#FinalLotName
????????????INSERT?INTO?#FinalLotName?SELECT?LotName,SourceLotName,SNCust?FROM?#FinalLotNameX21????????
????????END
????END
????--1.3
????IF?@SNCust<>''
????BEGIN
????????SELECT?Val?INTO?#WorkCustomSN?FROM?fn_String_To_Table(@SNCust,',',1)
????????IF?EXISTS(SELECT?1?FROM?#FinalLotName)--前面兩個(gè)條件至少有一個(gè)有值
????????BEGIN
????????????SELECT?a.LotName,a.SourceLotName,a.SNCust?INTO?#FinalLotNameX3?FROM?#FinalLotName?a?WHERE?EXISTS(SELECT?1?FROM?#WorkCustomSN?b?WHERE?a.SNCust=b.Val)
????????????DELETE?FROM?#FinalLotName?
????????????INSERT?INTO?#FinalLotName?SELECT?LotName,SourceLotName,SNCust?FROM?#FinalLotNameX3
????????END
????????ELSE
????????BEGIN
????????????SELECT?a.SNMes?INTO?#WorkLotX?FROM?CO_SN_LINK_CUSTOMER?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkCustomSN?b?WHERE?a.SNCust=b.Val)
????????????-------------------以下邏輯和變量1(@LotName)類似[先根據(jù)外部序列號(hào)求解序列號(hào),再照搬第一個(gè)判斷變量的方式]
????????????SELECT?LotPK,LotName?INTO?#WorkLotPKX?FROM?MMLots?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkLotX?b?WHERE?b.SNMes=MMLots.LotID)

????????????--求SourceLotPK只能在這里求
????????????SELECT?a.LotPK,a.SourceLotPK?into?#WorkSourcePKX?FROM?MMLotOperations?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkLotPKX?b?WHERE?b.LotPK=a.LotPK)?AND?a.SourceLotPK?IS?NOT?NULL

????????????SELECT?a.LotPK,a.SourceLotPK,b.LotName?INTO?#WorkSourcePK2X?FROM?#WorkSourcePKX?a?JOIN?#WorkLotPKX?b?ON?a.LotPK=b.LotPK

????????????INSERT?INTO?#FinalLotName?SELECT?a.LotName,b.LotName?AS?SourceLotName,NULL?FROM?#WorkSourcePK2X?a?JOIN?(SELECT?LotPK,LotName?FROM?MMLots?WITH(NOLOCK)?)?b?on?a.SourceLotPK=b.LotPK?--b的里面加不加WHERE?RowDeleted=0待確定
????????????SELECT?a.LotName,a.SourceLotName,b.SNCust?INTO?#FinalLotNameX31?FROM?#FinalLotName?a?LEFT?JOIN?CO_SN_LINK_CUSTOMER?b?WITH(NOLOCK)?ON?a.LotName=b.SNMes
????????????DELETE?FROM?#FinalLotName
????????????INSERT?INTO?#FinalLotName?SELECT?LotName,SourceLotName,SNCust?FROM?#FinalLotNameX31
????????????-----------------------
????????END
????END

????/**
?????* 2)定義全局的臨時(shí)表,用于替換第一個(gè)全局臨時(shí)表。
?????**/

????CREATE?TABLE?#FinalCO_SN
????(
????????SN?NVARCHAR(50),
????????SourceSN?NVARCHAR(50),
????????SNCust?NVARCHAR(128),
????????matl_def_id?NVARCHAR(50),--sn的物料ID
????????ComMaterials?NVARCHAR(50),??--SourceSN的物料ID
????????MESOrderID?NVARCHAR(20),
????????OnPlantID?NVARCHAR(20),
????????VendorID?NVARCHAR(20),
????????DateCode?NVARCHAR(20)?,
????????SNNote?NVARCHAR(512)
????)
????--2.1
????IF?@MESOrderID<>''
????BEGIN
????????-------------------------------將MESOrderID做特殊處理-----------------------------------
????????SELECT?Val?INTO?#WorkMESOrderID?FROM?fn_String_To_Table(@MESOrderID,',',1)
????????IF?@OnPlant='Comba'
????????BEGIN
????????????UPDATE?#WorkMESOrderID?SET?Val='C000'+Val?WHERE?LEN(Val)=9
????????END
????????ELSE
????????BEGIN
????????????UPDATE?#WorkMESOrderID?SET?Val='W000'+Val?WHERE?LEN(Val)=9
????????END
????????SELECT?SN,MaterialID,MESOrderID,OnPlantID?INTO?#WorkCO_SN1?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)
????????WHERE?SNType='IntSN'?AND?SNRuleName?=?'ProductSNRule'?AND?OnPlantID=@OnPlant
????????AND?EXISTS(SELECT?1?FROM?#WorkMESOrderID?b?WHERE?a.MESOrderID=b.Val)
????????------------------------------------------------------------------------------------------
????????--條件判斷(邏輯分析)開始
????????IF?EXISTS(SELECT?1?FROM?#FinalLotName)--如果前面判斷的查詢條件有值
????????BEGIN
????????????--查出SourceLotName對(duì)應(yīng)的查詢字段
????????????SELECT?a.SN?AS?SourceLotName,a.VendorID,a.DateCode,a.SNNote,a.MaterialID?AS?ComMaterials?INTO?#SourceLotNameTable?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SN=b.SourceLotName)

????????????INSERT?INTO?#FinalCO_SN
????????????SELECT?a.LotName,a.SourceLotName,d.SNCust,b.MaterialID,c.ComMaterials,b.MESOrderID,b.OnPlantID,c.VendorID,c.DateCode,c.SNNote?FROM?#FinalLotName?a?
????????????LEFT?JOIN?#WorkCO_SN1?b?ON?a.LotName=b.SN
????????????LEFT?JOIN?#SourceLotNameTable?c?ON?a.SourceLotName=c.SourceLotName
????????????LEFT?JOIN?CO_SN_LINK_CUSTOMER?d?WITH(NOLOCK)?ON?a.LotName=d.SNMes
????????END
????????ELSE
????????BEGIN
????????????--已知SN集合求解對(duì)應(yīng)的SourceSN和SNCust集合------------------------------------------
????????????SELECT?LotPK,LotName?INTO?#WorkLotPK410?FROM?MMLots?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkCO_SN1?b?WHERE?b.SN=MMLots.LotID)
????????????SELECT?a.LotPK,a.SourceLotPK?into?#WorkSourcePK420?FROM?MMLotOperations?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkLotPK410?b?WHERE?b.LotPK=a.LotPK)?AND?a.SourceLotPK?IS?NOT?NULL
????????????SELECT?a.LotPK,a.SourceLotPK,b.LotName?INTO?#WorkSourcePK430?FROM?#WorkSourcePK420?a?JOIN?#WorkLotPK410?b?ON?a.LotPK=b.LotPK
????????????INSERT?INTO?#FinalLotName?SELECT?a.LotName,b.LotName?AS?SourceLotName,NULL?FROM?#WorkSourcePK430?a?JOIN?(SELECT?LotPK,LotName?FROM?MMLots?WITH(NOLOCK)?)?b?on?a.SourceLotPK=b.LotPK?--b的里面加不加WHERE?RowDeleted=0待確定

????????????SELECT?a.LotName,a.SourceLotName,b.SNCust?INTO?#FinalLotNameX440?FROM?#FinalLotName?a?LEFT?JOIN?CO_SN_LINK_CUSTOMER?b?WITH(NOLOCK)?ON?a.LotName=b.SNMes
????????????DELETE?FROM?#FinalLotName
????????????INSERT?INTO?#FinalLotName?SELECT?LotName,SourceLotName,SNCust?FROM?#FinalLotNameX440
????????????-------------------------------------------------------------------------------------
????????????SELECT?a.SN?AS?SourceLotName,a.VendorID,a.DateCode,a.SNNote,a.MaterialID?AS?ComMaterials?INTO?#SourceLotNameTable2?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SN=b.SourceLotName)

????????????INSERT?INTO?#FinalCO_SN
????????????SELECT?a.LotName,a.SourceLotName,a.SNCust,b.MaterialID,c.ComMaterials,b.MESOrderID,b.OnPlantID,c.VendorID,c.DateCode,c.SNNote?FROM?#FinalLotName?a?
????????????LEFT?JOIN?#WorkCO_SN1?b?ON?a.LotName=b.SN
????????????LEFT?JOIN?#SourceLotNameTable2?c?ON?a.SourceLotName=c.SourceLotName
????????END????
????END
????--2.2
????IF?@DateCode<>''
????BEGIN
????????SELECT?Val?INTO?#WorkDateCode?FROM?fn_String_To_Table(@DateCode,',',1)
????????--此@DataCode條件求解出來的是SourceSN
????????SELECT?SN?AS?SourceSN,MaterialID?AS?ComMaterials,VendorID,DateCode,SNNote?INTO?#WorkSourceSNT1?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkDateCode?b?WHERE?a.DateCode=b.Val)
????????----------------------------------------------------------------------------------------------------
????????--條件判斷(邏輯分析)開始
????????IF?EXISTS(SELECT?1?FROM?#FinalCO_SN)--如果前面判斷的查詢條件有值
????????BEGIN
????????????SELECT?a.LotName,a.SourceLotName,a.SNCust,a.MaterialID,a.ComMaterials,a.MESOrderID,a.OnPlantID,a.VendorID,a.DateCode,a.SNNote?INTO?#TMP51?FROM?#FinalCO_SN?a?WHERE?EXISTS?(SELECT?1?FROM?#WorkDateCode?b?WHERE?a.DateCode=b.Val)
????????????DELETE?FROM?#FinalCO_SN
????????????INSERT?INTO?#FinalCO_SN?SELECT?LotName,SourceLotName,SNCust,MaterialID,ComMaterials,MESOrderID,OnPlantID,VendorID,DateCode,SNNote?FROM?#TMP51
????????END
????????ELSE
????????BEGIN
????????????IF?EXISTS(SELECT?1?FROM?#FinalLotName)
????????????BEGIN
????????????--查出SourceLotName對(duì)應(yīng)的查詢字段
????????????SELECT?a.SourceSN,a.VendorID,a.DateCode,a.SNNote,a.ComMaterials?INTO?#SourceLTX5?FROM?#WorkSourceSNT1?a?WHERE?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SourceSN=b.SourceLotName)
????????????--查出SN對(duì)應(yīng)的查詢字段
????????????SELECT?SN,MaterialID,MESOrderID,OnPlantID?INTO?#WorkSNT510?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)
????????????WHERE?SNType='IntSN'?AND?SNRuleName?=?'ProductSNRule'?AND?OnPlantID=@OnPlant
????????????AND?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SN=b.LotName)

????????????INSERT?INTO?#FinalCO_SN
????????????SELECT?a.LotName,a.SourceLotName,d.SNCust,b.MaterialID,c.ComMaterials,b.MESOrderID,b.OnPlantID,c.VendorID,c.DateCode,c.SNNote?FROM?#FinalLotName?a?
????????????LEFT?JOIN?#WorkSNT510?b?ON?a.LotName=b.SN
????????????LEFT?JOIN?#WorkSourceSNT1?c?ON?a.SourceLotName=c.SourceSN
????????????LEFT?JOIN?CO_SN_LINK_CUSTOMER?d?WITH(NOLOCK)?ON?a.LotName=d.SNMes

????????????END
????????????ELSE
????????????BEGIN
????????????????--已知SourceSN集合求解對(duì)應(yīng)的SN和SNCust集合------------------------------------------
????????????????SELECT?LotPK?AS?SourceLotPK,LotName?AS?SrouceLotName?INTO?#WorkLotX510?FROM?MMLots?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkSourceSNT1?b?WHERE?b.SourceSN=MMLots.LotID)
????????????????SELECT?a.LotPK,a.SourceLotPK?into?#WorkLotX520?FROM?MMLotOperations?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkLotX510?b?WHERE?b.SourceLotPK=a.SourceLotPK)
????????????????SELECT?a.LotPK,a.SourceLotPK,b.SrouceLotName?INTO?#WorkLotX530?FROM?#WorkLotX520?a?JOIN?#WorkLotX510?b?ON?a.SourceLotPK=b.SourceLotPK

????????????????INSERT?INTO?#FinalLotName?SELECT?b.LotName,a.SrouceLotName,NULL?FROM?#WorkLotX530?a?JOIN?(SELECT?LotPK,LotName?FROM?MMLots?WITH(NOLOCK)?)?b?on?a.LotPK=b.LotPK?--b的里面加不加WHERE?RowDeleted=0待確定

????????????????SELECT?a.LotName,a.SourceLotName,b.SNCust?INTO?#WorkLotX540?FROM?#FinalLotName?a?LEFT?JOIN?CO_SN_LINK_CUSTOMER?b?WITH(NOLOCK)?ON?a.LotName=b.SNMes
????????????????DELETE?FROM?#FinalLotName
????????????????INSERT?INTO?#FinalLotName?SELECT?LotName,SourceLotName,SNCust?FROM?#WorkLotX540
????????????????-------------------------------------------------------------------------------------
????????????????SELECT?SN,MaterialID,MESOrderID,OnPlantID?INTO?#WorkLotX550?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)
????????????????WHERE?SNType='IntSN'?AND?SNRuleName?=?'ProductSNRule'?AND?OnPlantID=@OnPlant
????????????????AND?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SN=b.LotName)

????????????????INSERT?INTO?#FinalCO_SN
????????????????SELECT?a.LotName,a.SourceLotName,a.SNCust,b.MaterialID,c.ComMaterials,b.MESOrderID,b.OnPlantID,c.VendorID,c.DateCode,c.SNNote?FROM?#FinalLotName?a?
????????????????LEFT?JOIN?#WorkLotX550?b?ON?a.LotName=b.SN
????????????????LEFT?JOIN?#WorkSourceSNT1?c?ON?a.SourceLotName=c.SourceSN
????????????END
????????END
????END
????--2.3
????IF?@comdef<>''
????BEGIN
????????SELECT?Val?INTO?#WorkComdef?FROM?fn_String_To_Table(@comdef,',',1)
????????--此@comdef條件求解出來的是SourceSN
????????SELECT?SN?AS?SourceSN,MaterialID?AS?ComMaterials,VendorID,DateCode,SNNote?INTO?#WorkSourceSNT16?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkComdef?b?WHERE?a.MaterialID=b.Val)
????????----------------------------------------------------------------------------------------------------
????????--條件判斷(邏輯分析)開始
????????IF?EXISTS(SELECT?1?FROM?#FinalCO_SN)--如果前面判斷的查詢條件有值
????????BEGIN
????????????SELECT?a.LotName,a.SourceLotName,a.SNCust,a.MaterialID,a.ComMaterials,a.MESOrderID,a.OnPlantID,a.VendorID,a.DateCode,a.SNNote?INTO?#TMP516?FROM?#FinalCO_SN?a?WHERE?EXISTS?(SELECT?1?FROM?#WorkComdef?b?WHERE?a.matl_def_id=b.Val)
????????????DELETE?FROM?#FinalCO_SN
????????????INSERT?INTO?#FinalCO_SN?SELECT?LotName,SourceLotName,SNCust,MaterialID,ComMaterials,MESOrderID,OnPlantID,VendorID,DateCode,SNNote?FROM?#TMP516
????????END
????????ELSE
????????BEGIN
????????????IF?EXISTS(SELECT?1?FROM?#FinalLotName)
????????????BEGIN
????????????--查出SourceLotName對(duì)應(yīng)的查詢字段
????????????SELECT?a.SourceSN,a.VendorID,a.DateCode,a.SNNote,a.ComMaterials?INTO?#SourceLTX56?FROM?#WorkSourceSNT16?a?WHERE?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SourceSN=b.SourceLotName)
????????????--查出SN對(duì)應(yīng)的查詢字段
????????????SELECT?SN,MaterialID,MESOrderID,OnPlantID?INTO?#WorkSNT5106?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)
????????????WHERE?SNType='IntSN'?AND?SNRuleName?=?'ProductSNRule'?AND?OnPlantID=@OnPlant
????????????AND?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SN=b.LotName)

????????????INSERT?INTO?#FinalCO_SN
????????????SELECT?a.LotName,a.SourceLotName,d.SNCust,b.MaterialID,c.ComMaterials,b.MESOrderID,b.OnPlantID,c.VendorID,c.DateCode,c.SNNote?FROM?#FinalLotName?a?
????????????LEFT?JOIN?#WorkSNT5106?b?ON?a.LotName=b.SN
????????????LEFT?JOIN?#WorkSourceSNT16?c?ON?a.SourceLotName=c.SourceSN
????????????LEFT?JOIN?CO_SN_LINK_CUSTOMER?d?WITH(NOLOCK)?ON?a.LotName=d.SNMes

????????????END
????????????ELSE
????????????BEGIN
????????????????--已知SourceSN集合求解對(duì)應(yīng)的SN和SNCust集合------------------------------------------
????????????????SELECT?LotPK?AS?SourceLotPK,LotName?AS?SrouceLotName?INTO?#WorkLotX5106?FROM?MMLots?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkSourceSNT16?b?WHERE?b.SourceSN=MMLots.LotID)
????????????????SELECT?a.LotPK,a.SourceLotPK?into?#WorkLotX5206?FROM?MMLotOperations?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#WorkLotX5106?b?WHERE?b.SourceLotPK=a.SourceLotPK)
????????????????SELECT?a.LotPK,a.SourceLotPK,b.SrouceLotName?INTO?#WorkLotX5306?FROM?#WorkLotX5206?a?JOIN?#WorkLotX5106?b?ON?a.SourceLotPK=b.SourceLotPK

????????????????INSERT?INTO?#FinalLotName?SELECT?b.LotName,a.SrouceLotName,NULL?FROM?#WorkLotX5306?a?JOIN?(SELECT?LotPK,LotName?FROM?MMLots?WITH(NOLOCK)?)?b?on?a.LotPK=b.LotPK?--b的里面加不加WHERE?RowDeleted=0待確定

????????????????SELECT?a.LotName,a.SourceLotName,b.SNCust?INTO?#WorkLotX5406?FROM?#FinalLotName?a?LEFT?JOIN?CO_SN_LINK_CUSTOMER?b?WITH(NOLOCK)?ON?a.LotName=b.SNMes
????????????????DELETE?FROM?#FinalLotName
????????????????INSERT?INTO?#FinalLotName?SELECT?LotName,SourceLotName,SNCust?FROM?#WorkLotX5406
????????????????-------------------------------------------------------------------------------------
????????????????SELECT?SN,MaterialID,MESOrderID,OnPlantID?INTO?#WorkLotX5506?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)
????????????????WHERE?SNType='IntSN'?AND?SNRuleName?=?'ProductSNRule'?AND?OnPlantID=@OnPlant
????????????????AND?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SN=b.LotName)

????????????????INSERT?INTO?#FinalCO_SN
????????????????SELECT?a.LotName,a.SourceLotName,a.SNCust,b.MaterialID,c.ComMaterials,b.MESOrderID,b.OnPlantID,c.VendorID,c.DateCode,c.SNNote?FROM?#FinalLotName?a?
????????????????LEFT?JOIN?#WorkLotX5506?b?ON?a.LotName=b.SN
????????????????LEFT?JOIN?#WorkSourceSNT16?c?ON?a.SourceLotName=c.SourceSN
????????????END
????????END
????END

????/**
?????*?3)條件判斷結(jié)束
?????**/

????IF?EXISTS(SELECT?1?FROM?#FinalLotName)
????BEGIN
????????IF?EXISTS(SELECT?1?FROM?#FinalCO_SN)
????????BEGIN--3.1
????????????SELECT?a.matl_def_id,b.Descript,a.MESOrderID?AS?pom_order_id,a.SN?AS?LotName,a.SourceSN?AS?ComLot,
???????????????????a.ComMaterials,c.Descript?AS?ComMatDes,a.VendorID,a.DateCode,a.SNNote,
???????????????????OnPlantID,SNCust?FROM?#FinalCO_SN?a
???????????????????JOIN?MMDefinitions?b?WITH(NOLOCK)?ON?a.matl_def_id=b.DefID
???????????????????JOIN?MMDefinitions?c?WITH(NOLOCK)?ON?a.ComMaterials=c.DefID
????????????WHERE?NOT?EXISTS(select?distinct?SN,?SourceSN?from?#FinalCO_SN?x?
?????????????????????????????where?x.SN?=?a.SourceSN?and?x.SourceSN?=?a.SN)
????????END
????????ELSE
????????BEGIN--3.2
????????????--3.2.1求解SN的必查字段
????????????SELECT?SN,MaterialID,MESOrderID,OnPlantID?INTO?#FinalSNX1?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)
????????????WHERE?SNType='IntSN'?AND?SNRuleName?=?'ProductSNRule'?AND?OnPlantID=@OnPlant
????????????AND?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SN=b.LotName)
????????????--3.2.2求解SourceSN的必查字段
????????????SELECT?a.SN?AS?SourceLotName,a.VendorID,a.DateCode,a.SNNote,a.MaterialID?AS?ComMaterials?INTO?#FinalSNX2?FROM?CO_SN_GENERATION?a?WITH(NOLOCK)?WHERE?EXISTS(SELECT?1?FROM?#FinalLotName?b?WHERE?a.SN=b.SourceLotName)

????????????SELECT?b.MaterialID?AS?matl_def_id,x.Descript,b.MESOrderID?AS?pom_order_id,b.SN?AS?LotName,c.SourceLotName?AS?ComLot,c.ComMaterials,y.Descript?AS?ComMatDes,c.VendorID,c.DateCode,c.SNNote,b.OnPlantID,a.SNCust
????????????FROM?#FinalLotName?a
????????????LEFT?JOIN?#FinalSNX1?b?ON?a.LotName=b.SN
????????????LEFT?JOIN?#FinalSNX2?c?ON?a.SourceLotName=c.SourceLotName
????????????JOIN?MMDefinitions?x?WITH(NOLOCK)?ON?b.MaterialID=x.DefID
????????????JOIN?MMDefinitions?y?WITH(NOLOCK)?ON?c.ComMaterials=y.DefID
????????????WHERE?NOT?EXISTS(
????????????????SELECT?DISTINCT?*?FROM?#FinalLotName?z
????????????????WHERE?z.LotName=a.SourceLotName?and?z.SourceLotName=a.LotName
????????????)
????????END
????END
????ELSE
????BEGIN
????????IF?EXISTS(SELECT?1?FROM?#FinalCO_SN)
????????BEGIN--3.3
????????????SELECT?a.matl_def_id,b.Descript,a.MESOrderID?AS?pom_order_id,a.SN?AS?LotName,a.SourceSN?AS?ComLot,
???????????????????a.ComMaterials,c.Descript?AS?ComMatDes,a.VendorID,a.DateCode,a.SNNote,
???????????????????OnPlantID,SNCust?FROM?#FinalCO_SN?a
???????????????????JOIN?MMDefinitions?b?WITH(NOLOCK)?ON?a.matl_def_id=b.DefID
???????????????????JOIN?MMDefinitions?c?WITH(NOLOCK)?ON?a.ComMaterials=c.DefID
????????????WHERE?NOT?EXISTS(select?distinct?SN,?SourceSN?from?#FinalCO_SN?x?
?????????????????????????????where?x.SN?=?a.SourceSN?and?x.SourceSN?=?a.SN)
????????END
????????ELSE
????????BEGIN--3.4
????????????PRINT?'There?is?no?queryable?condition,please?enter?at?less?a?query?conditon.'
????????END
????END

END
GO


雖然犧牲了代碼的可讀性,但創(chuàng)造了性能價(jià)值。本人水平有限,還請(qǐng)各位不吝賜教!


最后,將 SSRS 報(bào)表替換成此存儲(chǔ)過程后,SQL 查詢分析器是秒查的。B/S 前端用時(shí) 1~2 秒!


總結(jié)


平常的你是否偶爾會(huì)因急于完成任務(wù)而書寫一堆性能極低的 SQL 語句呢?寫出可靠性能的 SQL 語句不難,難的是習(xí)慣。


本文的優(yōu)化思想很簡單,關(guān)鍵點(diǎn)是避免全表掃描&注重 SQL 語句寫法&索引。


另外,如果你查詢的表有可能會(huì)在查詢時(shí)段更新,而實(shí)際業(yè)務(wù)需求允許臟讀,可加 with(nolock)預(yù)防查詢被更新事物阻塞。


END


有熱門推薦?

1.?糾結(jié)哇!日志框架選型,Logback 還是 Log4j2?

2.?三天兩夜肝完這篇萬字長文,終于拿下了TCP/IP

3.?Spring Boot 中的 RestTemplate不好用?試試 Retrofit !

4.?后端不哭!最新優(yōu)化性能經(jīng)驗(yàn)分享來啦

最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

謝謝支持喲 (*^__^*)

瀏覽 20
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 搡BBBB搡BBB搡五十粉嫩| 十八无码成人免费网站| 久久精彩偷拍视频| 久操视频在线播放| 尤物视频官网| 怡春院在线视频| 国产在线久久久| 国产高清视频在线观看| 97人妻精品一区二区三区视频 | 翔田千里53歳在线播放| 黄片免费视频| 老司机免费视频| 国产成人精品av| 亚洲无码视频在线免费观看 | 亚洲五月婷| 国产精品欧美一区二区| 18禁看网站| 思思热99热| 内射在线播放| 欧美丰满少妇人妻精品| 国产AV资源网| 久久久久久久久久久国产| 性猛交AAAA片免费观看直播| 色色com| 天天艹夜夜艹| 日韩有码在线观看| 无码人妻精品一区二区蜜桃漫画| 懂色AV无码中字幕一区| 色狠狠干| 久久毛片人妻| 日本在线免费观看| 伊人导航| 欧美中文在线观看| 成人高清无码在线观看| 国产乱伦AV网站| 国产激情综合在线| 国产精品久久久久的角色| 久久狠| 色女人天堂| 久久AV影院| 久久成人三级片| 日韩在线三级片| 九九re| 操逼第二页| 无码秘蜜桃一区二区| 国产精品秘久久久久久99| 国产成人高清无码| 伊人久久香| 91看片看婬黄大片女跟女| 天天日天天日天天操| 99亚洲无码| 肉片无遮挡一区二区三区免费观看视频 | 97精品国产97久久久久久免费| 丁香五月激情在线| 免费视频爱爱| 日本一区二区三区视频在线观看 | 黄色视频大全在线观看| 免费观看成人片| 最新人妻| 欧美操操操| 中文无码熟妇人妻AV在线| 国产最新视频| 日韩成人一区二区| 91精品在线免费观看| 成人在线三级片| 福利导航视频| 黄色视频网站观看| 天天操大香蕉| 性欧美V| 成人免费区一区二区三区| 综合久久99| 西西人体444大胆高清张悠雨| 亚洲无码精品在线| 国产又爽又黄免费视频免费| 懂色av粉嫩av蜜臀av| 亚洲视频高清无码| 在线观看中文字幕AV| 久久这里只有精品9| 色色视频网| 九九九九九九精品视频| 无码三级在线播放| 国产高清AV无码| 嫩BBB槡BBBB槡BBB小号| 欧美精品午夜福利无码| 久久丁香五月婷婷五月天激情视频 | 久久cao| 欧美日韩免费一区二区三区| 国产精品在线观看视频| 家庭乱伦av| 亚洲综合成人网| 久色91| 欧洲美一区二区三区亚洲| 亚洲三级电影在线观看| 啊啊啊啊啊靠逼| 伊人伊人网| 8050午夜一级免费| 青春草在线观看| 人妻少妇偷人精品无码免费| 特级黄色毛片| 尻屄网站| 日韩精品成人电影| 国产精品久久久91| 蜜桃传媒一区二区| 亚洲激情在线| 影音先锋成人电影| www.俺去也| 99热99| 加勒比综合| 蜜臀一区二区三区| 东方av在线观看| 国产精品AV在线| 色天堂视频| 无码视频免费看| 日本精品一区二区三区四区的功能| 四虎成人视频| 最近中文字幕免费MV第一季歌词怀孕| 色婷婷AV一区二区三区软件| 在线免费观看AV片| 国产精品A片守望| 97国产免费| 免费无码成人片在线播放| 国产一二三四区| 在线观看欧美日韩| 大香蕉在线网| 老熟女痒到不行-ThePorn| 亚洲成人视频网站| 午夜激情av| 久操综合| 欧美精品一区二区三区成人片在线 | 激情丁香六月| 成人a片在线观看| 久久久97| 操逼五月天| 尤物AV| 国产精品内射婷婷一级二| 亚洲最大黄色| 91久久婷婷国产麻豆精品电影.co| 成人喷水亚洲一区无码| 乱码中文字幕日韩欧美在线| 亚洲激情网址| 青青草大香蕉在线| 久久精品无码一区二区无码性色| 国产熟睡乱子伦午夜视频_第1集 | 国产经典午夜福利视频合集| 91视频在线免费看| 国产91精品探花一区二区| 亚洲精品成人av无码| 婷婷色亚洲| 日韩精品不卡| 97超碰大香蕉| 青娱乐大香蕉| 视频一视频二在线视频| 精品看片| 国产精品2025| 美女高潮在线| 成人在线三级片| 成人A片免费观看| 西西人体444rt高清大胆模特| 中文字幕视频网站| 超碰人人操人人爱| 亚洲无码第一页| 日韩成人无码| 国产绿奴09-01| 亚洲天堂视频网| 久久免费成人电影| 国产日韩中文字幕| 东方av在| 中文最新天堂8√| 国产一区二区三区无码| 69成人网站| 中文无码在线| 蜜桃导航-精品导航| 超碰997| 久久免费看| 人妻av中文无码| 日本久久精品18| 成人免费视频国产免费麻豆,| 秋霞一区| 久久久亚洲无码| 中文字幕精品在线免费视频观看视频 | 精品免费国产一区二区三区四区的使用方法| 乱伦麻豆| 又a又黄高清无码视频| 国产精品毛片一区视频播| 午夜无码久久| 日日操人人操| 免费观看操逼| 免费亚洲无码| 黄色片在线看| 中文字幕日韩无码电影| 国产黄色视频在线播放| 午夜在线观看视频18| 欧美成人久久| 久久亚洲日韩天天做日日做综合亚洲 | 亚洲天堂视频在线观看| 国产小视频免费在线观看| 18禁无码网站| 91成人在线电影| 无码一区二区三区四区五区六区| 98国产精品| 亚洲日韩精品中文字幕| 色就是欧美| 无码激情18激情视频| 亚洲AV一二三区| 操比在线| 不卡AV在线| 久热99| 国产精品AV片| 免费A级黄片| 自拍偷拍15p| 成人视频无码| 中文字幕亚洲视频| 五月婷婷免费视频| 亚洲无码一级视频| 中文字幕国产AV| 日本久久网站| 久草天堂| 人人爱人人看| 亚洲免费观看高清完| 99看片| 中文字幕第12页| 黄色A片视频| 精品欧美片在线观看步骤| 国产香蕉AV| 天天无码视频| 无码人妻精品一区二区三区99仓| 日本人妻中文字幕| 青草久在线| 成人无码网站在线观看| a片免费网站| 亚洲视频综合| 成人视频三级| 亚洲综合一区二区三区| 日韩欧美成人在线视频| 久久人人爱| 国产天天操| 高清毛片AAAAAAAAA片| 猛男大粗猛爽H男人味| 精品一区无码| www.天天日| 欧洲三级片网站| 免费观看一区| 婷婷丁香五月社区亚洲| 唐山熟女工棚嗷嗷叫| 欧美老女人操逼群| 日本一级片免费看| 波多野结衣一区二区三区在线观看| 亚洲日韩Av无码中文字幕美国 | 亚洲毛片在线| 国产精品九九| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 欧美日韩中文在线观看| 国产成人无码精品| 性猛交AAAA片免费看蜜桃视频| 伊人网站| 久久av影院| 成人在线A片| 国产秘久久一区二区| 国产精品视频瘾无码| 91久久久久久久18| JiZZjiZZ亚洲成熟熟妇| 久久精品网| 爱爱爱爱网| 欧美嗯啊| 日韩无码国产精品| 国产香蕉在线播放| 97国产在线观看| 操美女逼逼| 青青草成人免费在线视频| 中文字幕AV网| 99免费观看视频| 久久v| 国产一级操逼片| 成人综合网站| 午夜无码电影| 免费观看成人片| 九九天堂| 欧美午夜福利视频| 亚洲AV无码成人精品久久久| 成人毛片18女人毛片真水| 久久久久久久免费视频| 北条麻妃无码一区三区| 色哟哟一中文字慕| 嫩草AV| 伊人综合电影| 五月黄色电影| 影音先锋成人av| 激情五月毛片| 国产又粗又猛又爽又黄91精品| 午夜理论片| 精品无码一区二区人妻久久蜜桃| 青青草原在线视频免费观看| 特级西西444WWW视频| 精品乱子伦一区二区三区,亚洲国产成| 亚洲精品美女视频| av手机版| 小日本91在线观看| 无码视频中文字幕| 日韩人妻无码中文字幕| 亚洲高清无码免费在线观看| 成人免费网站在线| 碰碰97| 色就是亚洲| 日本中文字幕亚洲| 高潮喷水在线观看| 人人摸人人操人人爱| 久久国内| 撸一撸成人在线做爱视频。| 天堂色综合| 懂色av,蜜臀AV粉嫩av| 一级性生活视频| 熟女少妇视频| 午夜天堂精品久久久久| 国产一级操逼片| 国产免费自拍视频| 亚洲AV五月天在线| 亚洲最新无码| 高清国产AV| 色色色五月婷婷| 国产精品93333333| 成人福利小视频| 免费无码蜜臀在线观看| 亚洲成人av在线| AV-ThePorn| 亚洲福利在线观看视频| 另类av| 人与禽一级A片一区二区三区| 思思99热| 超碰自拍97| 一区二区三区免费在线观看| 人人操在线| 三级爱爱| 亚洲第一av| 无码人妻精品一区二区三区温州| 亚洲无码高清一区| 青草影视久久| 成人福利视频在线观看| 人人妻人人澡人人爽人人| 亚洲日韩精品成人无码专区AV| 丁香五月大香蕉| 亚洲AV第一页| 日韩精品人妻中文字幕有| 操逼在线观看| 欧美h在线观看| 五月天最新网址| 亚洲黄色视频在线免费观看 | 亚洲乱码中文字幕| 在线观看国产| 天天天天日天天干| 特黄网站| 91爱搞在线| 国产av中文字幕| 久久私拍视频| 国产伊人久久| 加勒比无码综合| 丁香五月综合网| 91亚洲国产成人| 国产精品中文| 青草社区在线观看| 九九热视频在线观看| 欧美成人一区二区| 日本黄色视频在线免费观看| 超碰麻豆| 九九热视频99| 国产骚妇| 亚洲综合视频网| 国产精品内射婷婷一级二| 少妇搡BBBB搡BBB搡小说| 欧美去干网| 无码精品黑人| 日韩一级欧美一级| 美女网站永久免费观看| 日本免费黄色片| 99色热视频| 色婷婷国产| 亚洲视频观看| 在线超碰| 一级黄片免费视频| 日本亚洲欧美| 真人一级片| 日韩无码小电影| 91无码精品国产AⅤ| 特级西西WWW888| 国产一道本| 无码成人片| 成人免费网站在线观看| 精品91| 自拍偷拍视频网| 51福利视频| 中文字幕乱码无码人妻系列蜜桃| 91成人免费视频| 亚洲一本之道| 狼人亚洲伊人| 成人黄色视频网站在线观看| 西西掰穴| 毛片黄色| 豆花无码视频一区二区| 欧美夜夜| 中文资源在线√8| 国产一级a爱做片免费☆观看| 在线国产激情视频| 欧美黄色免费看| 夜夜骑夜夜撸| 超碰大香蕉| 自拍视频国产| 久久久桃色| 污片网站| 色婷婷官网| 中文字幕一区二区三区四区五区六区 | 躁BBB躁BBB躁BBBBB乃| 精品国产午夜福利| 无码人妻精品一区二区三| 亚洲成av| 草逼网站| 三级毛片在线| 亚洲成人精品| 九九久久99| 日本三级黄色视频| 欧美第一夜| 中文字幕在线播放av| 91香蕉国产| 成人免费视频一区二区三区| 国产精品免费在线| h片网站在线观看| 日韩无任何视频在线观看| 亚洲电影无码| www.射| 成人做爰A片一区二区app| 国产小电影在线观看| 老女人操逼| 豆花av在线| 日韩在线观看视频免费| 日本成人黄色视频| 中文字幕无码A片| 中文字幕AV在线播放| 国产成人免费在线视频| 俺来也俺去也www色| 日日碰日日摸| 91久久人澡人妻人人澡人人爽| 国产成人在线免费观看| 国产骚女| 91亚洲国产成人| 亚洲成人网在线观看| 99精品999| 天堂a√中文8| 精品一区二区三区在线观看| 中文字幕自拍偷拍| 亚洲国产中文字幕| 天天爽夜夜爽夜夜爽精品| 免费射精一二三区| 亚洲爱爱网| 中文字幕乱码在线| 亚洲欧美成人在线| 亚洲中文字幕在线视频观看| 综合av| 丁香五月中文字幕| 亚洲成人性爱视频| 91精品酒店视频| 高清无码在线免费| 天堂网av2014| 日韩人妻电影| 一级日逼片| 亚洲在线一区二区| 波多野结衣网站| 夜色福利在线| 色老板综合| 日韩三级电影| 不卡视频一区二区| 亚洲黄色在线免费观看| 国产91在线视频| 99ri国产| 午夜操逼逼| 国产又粗又大又爽91嫩草| 少妇搡BBBB搡BBB搡造水多| 撸撸综合网| 日本a在线| 天天操网址| 久久久老熟女一区二区三区91| 国产高清一区| 一级操逼毛片| 影音先锋久久久久AV综合网成人| 色逼视频| 国产不卡视频| 唐嫣一级婬片A片AAA| 国产一级在线观看| 欧美一区二区在线视频| 免费观看黄片网站| 色悠悠久久| 久久精品一区二区三区蜜芽的特点| 大香蕉在线视频网| 汇聚全球淫荡熟女| 欧美日韩一级视频| 大香蕉在8线| 天天爽天天爽夜夜爽| 91日韩欧美| 亚洲最大黄色视频| 免费看国产黄色| 久久狠| 国产精品二区高清在线苍井空| 日韩日批视频| 精品中文字幕在线播放| 国产成人精品三级麻豆| 黄色激情五月| 免费AV网站在线| 久久久影院| WWWA片| 黄色免费av| 国产Av大全| www.婷婷五月天| av在线资源观看| 亚洲天堂AV在线观看| 国产欧美在线不卡| 一级片| 欧美亚洲成人网| 女邻居的B好大| 国产黄色不卡| 青草青草| 波多野结衣亚洲视频| 嫩草国产在线| 成人夜间视频| 亚洲欧美动漫| 黄片在线免费播放| 国产秘精品区二区三区日本| 日韩无码久| 爱爱毛片| 日本一级大毛片a一| 懂色av蜜臀av粉嫩av分| 欧美成人网站视频| av在线精品| 国产不卡视频| sm国产在线调教视频| 丁香婷婷五月综合影院| 91日韩欧美| 夜夜操网站| 欧美亚洲成人在线观看| 福利大香蕉| 六月丁香五月婷婷| 2017天天干| 国产一a毛一a免费观看| 中文免费高清在线| 中文字幕首页| 男女av在线| 日韩精品一级| 国产丰满乱子伦无码| 国产a片视频| 开心四房播播第四婷婷| 国模精品无码一区二区免费蜜桃| 国产成人性爱| 欧美日韩国产成人电影| 日韩网站在线| 欧美成人毛片AAAAAA| 正在播放国产精品| 日韩成人区| 伊人成人在线视频观看| 精品乱子伦一区二区三区毛| 先锋AV资源| 久草热在线| 亚洲成人视频免费在线观看| 免费看黄色片视频| 亚洲va欧美va天堂v国产综合 | 91人妻日韩人妻无码专区精品| 婷婷操逼| 亚洲综合91| 日操夜操| 国产精品一区二区在线观看| 看A片在线| 美女操网站| 狠狠干综合| 亚州AV无码| 在线免费观看中文字幕| 操操av| 国产av小电影| 亚洲影院第一页在线观看| 欧美日韩国产尤物主播精品| 西西888WWW大胆无码| 日本欧美在线观看| 99看片| 黄色无码视频在线观看| 亚洲国产高清国产精品| 九九视屏| 成人A毛片| 国产精品欧美7777777| 国产黄A| 97久久一区二区| 一级a免一级a做免费线看内裤| 99热在线观看精品| 黄色大片AV| 丁香五月天激情| 午夜香蕉| 色婷婷在线视频观看| 狠狠躁日日躁夜夜躁2022麻豆| 99精品视频网站| 91人妻人澡| 激情久久五月天| 国产免费黄色视频| 老鸭窝毛片| 人妻无码一区二区三区摄像头| 另类老妇奶BBBBwBB| 日本成人高清视频| 日韩一区二区三区无码电影 | 色网站操逼| 久久婷婷五月丁香| 天天干狠狠| 亚洲欧美日韩性爱| 日韩中文字幕| 无码一道本| 高清无码视频在线播放| 日韩成人A片| 欧美三级美国一级| 小明看台湾成人永久免费视频网站 | 高清无码在线观看18| 中文字幕av久久爽Av| 东京热黄色| 久久久久久久久久久国产| 久久久久久大香蕉| 米奇色色色| 国产第八页| 无码三级AV| 亚洲第一网无码性色| 国产群交| 91人妻无码一区二区三区| 俺来也官网欧美久久精品| 精品无人区无码乱码毛片国产 | 亚洲综合p| 欧美日韩中文视频| 国产成人午夜精品无码区久久麻豆 | 久一视频| 色哟哟一区二区三区| 精品无码一区二区三区爱与| 嫩草Av| 亚洲AV无码精品岛国| 精品热99| 亚洲成人Av| 国产精品成人AV片| 夜夜骚精品人妻av一区| 国产精品久久久久久久久A| 日韩激情视频在线观看| 丰满人妻一区二区三区四区不卡| 九九九在线视频| 亚洲无码精品久久| 国产精品AV在线| 东京热视频在线观看| 人人操人人操人人操人人操人人操 | 正在播放JUQ-878木下凛凛子| av久草| 黄色日逼视频 | www.91在线| 激情五月婷婷| 操B五月天| 色哟哟一中文字慕| 香蕉av在线播放| 五月婷婷俺來也| 青青在线视频| 欧美一区二区| 人妻人人操| www黄片| 亚洲国产成人精品女人| 欧美成人精品AAA| 中文视频在线观看| 99精品视频在线观看免费| 一级特黄大片录像i| 亚洲免费中文字幕| 少妇人妻无码| 无码人妻精品一区二区三| 99超碰在线观看| 国产黄色视频免费| 网址你懂得| 猛男大粗猛爽H男人味| 黄色成人网站在线观看免费| 翔田千里无码在线| 欧美黄色毛片| 美女天堂网| 亚洲制服在线观看| 欧美A区| 色综合一区二区三区| 99综合视频| 欧美丰满老熟妇XXXXX性| 天天爽夜夜爽人人爽| 在线免费看a片| 欧美天堂在线观看| 一级日逼片| 亚洲69视频| 欧美亚洲成人在线| 日韩在线电影| 国产精品久久视频| 在线观看日本vs欧洲vs美洲| 影音先锋AV啪啪资源| 精品一区在线| 国产青青草| 天天日日天天| 一区二区三区久久久| 人人草人人| 奇米影视色偷偷| 脓肿是什么原因引起的,该怎么治疗| 久久国产黄色一级片| 国产免费一区二区三区网站免费| 久久久久国产一区二区三区四区| 蜜桃Av| 亚洲激情精品| 国产精品国内自产| 久久久老熟女一区二区三区91| 2021国产精品视频| 69成人| 精品亚洲成人| 激情爱爱网| 国产一级a毛一级a毛视频在线网站)| 丁香五月婷婷久久| 国产一级A| 亚洲高清无码在线视频| 欧美成人三级| 一本道中文字幕| 国产在线秘麻豆精品观看| 手机看片久久| www.三级| 久久成人电影| 欧美一区| 午夜精品久久久久久不卡8050| 国产精品视频一区二区三区在线观看| 国产精品视频久久久久| 日日摸日日添日日躁AV| 四虎成人在线| 国产免费无码视频| 五月丁香婷婷综合网| 欧美特黄AAAAAAAAA片| 亚洲国产中文字幕| 东京热高清无码| 日韩不卡| 亚洲综合免费| 一级免费爱爱视频| 色色网站在线观看| 无码AV网| 超碰碰碰碰| 国产在线观看AV| 一级免费黄色电影| 天天干天天日天天操| 极品少妇视频| 精品人人人人| 午夜成人网站在线观看| 欧亚AV| 日韩视频精品| 亚洲成人在线网站| 国产精品无码一区二区三区免费| 视色视频在线观看| 天天操夜夜操视频免费高清| 51国产视频| 夸克看成人片一级A片| www五月天| www.激情五月天| 五月伊人网| 亚洲欧洲在线观看| 婷婷激情五月综合| 成人天天爽| 无码免费在线观看视频| 久久久精品午夜人成欧洲亚洲韩国 | 一级黄视频| 亚洲成人色色| AA片免费网站| 日本Sm/调教/捆绑/紧缚| 欧美亚洲色色网视频| 青春草在线免费观看| 在线日韩一区二区| 东京热综合| 十八禁免费网站| 水果派中文解说AⅤ| 日韩精品视频免费在线观看| 逼特逼| 午夜AV在线观看| 999久久久久| 北条麻妃人妻中文无码| 一级特黄A片| 成人福利视频| 国产黄色免费视频| 水多多成人免费A片| 黄色成人18| 日韩中文字幕网站| 免费欧美黄片| 内射毛片| 91性爱视频在线观看| 国产精品2025| 狠狠综合| 久久久久成人片免费观看蜜芽| 五月丁香六月婷婷综合| 一级黄色片网站| 欧美三级性爱视频| 免费看AV大片| AA片在线观看视频在线播放| 中文字幕网址在线| 日韩欧美国产精品| 亚洲婷婷网| 99精品视频免费在线观看| 69视频在线观看免费| 综合伊人| 黄网在线免费观看| 欧美成人在线视频网站| 北条麻妃99精品青青久久| 18+免费网站| 97国产视频| 久草福利在线视频| 亚洲国产精品成人综合| 豆花视频无码| 成人自拍网站| 激情草逼| 丁香五月在线观看| 操逼大香蕉| 91叉叉叉| 黄色视频免费观看国产| 中国老熟妇| 午夜理论片| 日韩无码中文字幕视频| 人妖和人妖互交性XXXX视频| 国产精品成人视频| 色色丁香| 日韩精品一区二区三区黄冈站长 | 中文无码在线| 国产一级a一级a免费视频| 欧美日韩第一区| 久久性爱免费视频| 日韩人妻无码专区一区二区 | 加勒比精品| 特级西西444www精品视频| 996精品在线| 激情六月天| 三级无码电影| 亚洲视频观看| 娇小,学生,高潮,videos| 无码视频一区二区三区| 国产口爆视频| 一级二级无码| 国产第一页在线| 免费AV毛片| 人人澡人人摸| AA片免费看| 国产操B视频| 国产理伦| 日韩无码不卡视频| 精品人妻一区二区三区日产乱码| 日本午夜视频| 谁有毛片网站| 无码草| 成人黄色在线视频| 撸一撸在线| 欧美插菊花综合网| 激情无码网站| 黄色小视频免费看| 撒尿BBw搡BBwBBw| 亚洲欧美另类图片| 你懂的视频| 人人澡人人爽人人精品| 亚洲一区二区在线播放| 亚洲AV无码黑人专区| 欧美曰皮免费看| 免费在线观看黄色视频| 男人的天堂2019| 成人性爱在线| 日韩性爱区| 肏屄视频网站| 国产人成| 麻豆天美蜜桃91| 中文字幕精品人妻在线| 免费精品99| 欧美操逼的| 99亚洲视频| 亚洲片在线观看| 青青操视频在线| 黄色电影AV| 精品女同一区二区三区四区外站在线| 国产精品剧情| 人妻日韩精品中文字幕| 久久久毛片| 超碰精品在线| 亚洲在线视频免费观看| AV黄色网址| 中文字幕在线免费播放| 男女乱伦视频| 婷婷五月综合中文字幕| 韩国成人免费无码免费视频| 午夜偷拍网站| 做爱视频网站18| 国产日本欧美韩国久久久久| 一级久久| 美女被操网站| 婷婷国产亚洲精品网站| 老司机免费视频| 婷婷丁香激情| 中文无码日本一级A片久久影视| 一区二区三区色| 日本91| 欧美伦妇AAAAAA片| 亚洲少妇无码| 国产日韩一区二区三区| 免费Av在线| 97大香蕉在线视频| 狠狠色噜噜狠狠狠888米奇视频| 亚洲AV成人片色在线观看高潮| 99久久网站| A级视频免费观看| 日韩无码视频一区二区| 午夜老司机福利一二三区| AV中文无码| 亚洲天堂一区在线观看|