日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 數據庫 > SQL Server > 正文

SQLServer地址搜索性能優化

2024-08-31 01:04:32
字體:
來源:轉載
供稿:網友

這是一個很久以前的例子,現在在整理資料時無意發現,就拿出來再改寫分享。

1.需求

 1.1 基本需求: 根據輸入的地址關鍵字,搜索出完整的地址路徑,耗時要控制在幾十毫秒內。

 1.2 數據庫地址表結構和數據:

 表TBAddress

 sqlserver,性能優化,sqlserver性能優化

 表數據

 sqlserver,性能優化,sqlserver性能優化

 1.3 例子:

 e.g. 給出一個字符串如“廣 大”,找出地址全路徑中包含有“廣” 和“大”的所有地址,結果如下:

sqlserver,性能優化,sqlserver性能優化

下面將通過4個方法來實現,再分析其中的性能優劣,然后選擇一個比較優的方法。

 2.創建表和插入數據

 2.1 創建數據表TBAddress

use test;go/* create table */if object_id('TBAddress') is not null  drop table TBAddress;gocreate table TBAddress( ID int , Parent int not null , LevelNo smallint not null , Name nvarchar(50) not null , constraint PK_TBAddress primary key ( ID ));gocreate nonclustered index ix_TBAddress_Parent on TBAddress(Parent,LevelNo) include(Name) with(fillfactor=80,pad_index=on);create nonclustered index ix_TBAddress_Name on TBAddress(Name)include(LevelNo)with(fillfactor=80,pad_index=on);go

create table

2.2 插入數據

use testgo/*insert data*/set nocount onBegin Try  Begin Tran  Insert Into TBAddress ([ID],[Parent],[LevelNo],[Name])    Select 1,0,0,N'中國' Union All     Select 2,1,1,N'直轄市' Union All     Select 3,1,1,N'遼寧省' Union All     Select 4,1,1,N'廣東省' Union All     ... ...    Select 44740,930,4,N'奧依塔克鎮' Union All     Select 44741,932,4,N'巴音庫魯提鄉' Union All     Select 44742,932,4,N'吉根鄉' Union All     Select 44743,932,4,N'托云鄉'  Commit TranEnd TryBegin Catch  throw 50001,N'插入數據過程中發生錯誤.' ,1Rollback TranEnd Catchgo

附件: insert Data

 Note: 數據有44700條,insert代碼比較長,所以采用附件形式。

3.測試,方法1

3.1 分析:

 sqlserver,性能優化,sqlserver性能優化

a. 先搜索出包字段Name中含有“廣”、“大”的所有地址記錄存入臨時表#tmp。

  b. 再找出#tmp中各個地址到Level 1的全路徑。

    c. 根據步驟2所得的結果,篩選出包含有“廣”和“大”的地址路徑。

      d. 根據步驟3篩選的結果,查詢所有到Level n(n為沒有子地址的層編號)的地址全路徑。

3.2 存儲過程代碼:

Use testGoif object_ID('[up_SearchAddressByNameV0]') is not null  Drop Procedure [up_SearchAddressByNameV0]Gocreate proc up_SearchAddressByNameV0 (  @Name nvarchar(200))Asset nocount ondeclare @sql nvarchar(max) declare @tmp Table (Name nvarchar(50)) set @Name=@Name+' ' while patindex('% %',@Name)>0begin  set @Name=replace(@Name,' ',' ')  end set @sql ='select ''' +replace(@Name,' ',''' union all select ''')+''''insert into @tmp(Name) exec(@sql) if object_id('tempdb..#tmp') is not null drop table #tmpif object_id('tempdb..#') is not null drop table # create table #tmp(ID int )  while @Name>''begin  insert into #tmp(ID)  select a.ID from TBAddress a where a.Name like '%'+substring(@Name,1,patindex('% %',@Name)-1)+'%'    set @Name=Stuff(@Name,1,patindex('% %',@Name),'')end  ;with cte_SearchParent as(  select a.ID,a.Parent,a.LevelNo,convert(nvarchar(500),a.Name) as AddressPath from TBAddress a where exists(select 1 from #tmp x where a.ID=x.ID)   union all  select a.ID,b.Parent,b.LevelNo,convert(nvarchar(500),b.Name+'/'+a.AddressPath) as AddressPath    from cte_SearchParent a    inner join TBAddress b on b.ID=a.Parent      --and b.LevelNo=a.LevelNo -1      and b.LevelNo>=1)select a.ID,a.AddressPath   into #  from cte_SearchParent a   where a.LevelNo=1 and exists(select 1 from @tmp x where a.AddressPath like '%'+x.Name+'%' having count(1)=(select count(1) from @tmp)) ;with cte_result as(  select a.ID,a.LevelNo,b.AddressPath    from TBAddress a       inner join # b on b.ID=a.ID  union all  select b.ID,b.LevelNo,convert(nvarchar(500),a.AddressPath+'/'+b.Name) As AddressPath    from cte_result a      inner join TBAddress b on b.Parent=a.ID        --and b.LevelNo=a.LevelNo+1            )select distinct a.ID,a.AddressPath   from cte_result a   where not exists(select 1 from TBAddress x where x.Parent=a.ID)  order by a.AddressPath Go

procedure:up_SearchAddressByNameV0

 3.3 執行查詢:

exec up_SearchAddressByNameV0 '廣 大'

sqlserver,性能優化,sqlserver性能優化

共返回195行記錄。

3.4 客戶端統計信息:

sqlserver,性能優化,sqlserver性能優化

平均的執行耗時:  244毫秒

4.測試,方法2

 方法2是參照方法1,并借助全文索引來優化方法1中的步驟1。也就是在name列上建立全文索引,在步驟1中,通過全文索引搜索出包字段Name中含有“廣”、“大”的所有地址記錄存入臨時表#tmp,其他步驟保持不變。

 4.1 創建全文索引

use testgo/*create fulltext index*/if not exists(select 1 from sys.fulltext_catalogs a where a.name='ftCatalog')begincreate fulltext catalog ftCatalog As default;endgo--select * From sys.fulltext_languages    create fulltext index on TBAddress(Name language 2052 ) key index PK_TBAddressgo   alter fulltext index on dbo.TBAddress add(Fullpath language 2052)go

Note:  在Name列上創建全文索引使用的語言是簡體中文(Simplified Chinese)

sqlserver,性能優化,sqlserver性能優化

4.2 存儲過程代碼:

Use testGoif object_ID('[up_SearchAddressByNameV1]') is not null  Drop Procedure [up_SearchAddressByNameV1]Gocreate proc up_SearchAddressByNameV1 (  @Name nvarchar(200))Asset nocount ondeclare @sql nvarchar(max),@contains nvarchar(500) declare @tmp Table (Name nvarchar(50)) while patindex('% %',@Name)>0begin  set @Name=replace(@Name,' ',' ')  end set @sql ='select ''' +replace(@Name,' ',''' union all select ''')+''''set @contains='"'+replace(@Name,' ','*" Or "')+'*"' insert into @tmp(Name) exec(@sql) if object_id('tempdb..#') is not null drop table # ;with cte_SearchParent as(  select a.ID,a.Parent,a.LevelNo,convert(nvarchar(2000),a.Name) as AddressPath from TBAddress a where exists(select 1 from TBAddress x where contains(x.Name,@contains) And x.ID=a.ID)   union all  select a.ID,b.Parent,b.LevelNo,convert(nvarchar(2000),b.Name+'/'+a.AddressPath) as AddressPath    from cte_SearchParent a    inner join TBAddress b on b.ID=a.Parent      --and b.LevelNo=a.LevelNo -1      and b.LevelNo>=1)select a.ID,a.AddressPath   into #  from cte_SearchParent a   where a.LevelNo=1 and exists(select 1 from @tmp x where a.AddressPath like '%'+x.Name+'%' having count(1)=(select count(1) from @tmp)) ;with cte_result as(  select a.ID,a.LevelNo,b.AddressPath    from TBAddress a       inner join # b on b.ID=a.ID  union all  select b.ID,b.LevelNo,convert(nvarchar(2000),a.AddressPath+'/'+b.Name) As AddressPath    from cte_result a      inner join TBAddress b on b.Parent=a.ID        --and b.LevelNo=a.LevelNo+1            )select distinct a.ID,a.AddressPath   from cte_result a   where not exists(select 1 from TBAddress x where x.Parent=a.ID)  order by a.AddressPath Go

procedure:up_SearchAddressByNameV1

4.3測試存儲過程:

exec up_SearchAddressByNameV1 '廣 大'

sqlserver,性能優化,sqlserver性能優化

共返回195行記錄。

4.4 客戶端統計信息:

sqlserver,性能優化,sqlserver性能優化

平均的執行耗時:  166毫秒

5.測試,方法3

在方法2中,我們在Name列上創建全文索引提高了查詢性能,但我們不僅僅局限于一兩個方法,下面我們介紹第3個方法。

第3個方法,通過修改表的結構和創建全文索引。在表TBAddress增加多一個字段FullPath存儲各個地址到Level 1的全路徑,再在FullPath列上創建全文索引,然后直接通過全文索引來搜索FullPath列中包含“廣”和“大”的記錄。

5.1 新增加字段FullPath,并更新列FullPath數據:

use test;go/*alter table */if not exists ( select 1            from sys.columns a            where a.object_id = object_id('TBAddress')                and a.name = 'Fullpath' )  begin     alter table TBAddress add Fullpath nvarchar(200);  end;gocreate nonclustered index IX_TBAddress_FullPath on dbo.TBAddress(Fullpath) with(fillfactor=80,pad_index=on);go/*update TBAddress */with  cte_fullPath     as ( select ID, Parent, LevelNo, convert(nvarchar(500), isnull(Name, '')) as FPath, Fullpath        from dbo.TBAddress        where LevelNo = 1        union all        select A.ID, A.Parent, A.LevelNo, convert(nvarchar(500), B.FPath + '/' + isnull(A.Name, '')) as FPath, A.Fullpath        from TBAddress as A            inner join cte_fullPath as B on A.Parent = B.ID       )   update a    set   a.Fullpath = isnull(b.FPath, a.Name)    from dbo.TBAddress a        left join cte_fullPath b on b.ID = a.ID;go

5.2 在列FullPath添加全文索引:

alter fulltext index on dbo.TBAddress add(Fullpath language 2052)

5.3 存儲過程代碼:

Use testGoif object_ID('[up_SearchAddressByNameV2]') is not null  Drop Procedure [up_SearchAddressByNameV2]Gocreate proc up_SearchAddressByNameV2(  @name nvarchar(200))Asdeclare @contains nvarchar(500)set nocount onset @contains='"'+replace(@Name,' ','*" And "')+'*"'select id,FullPath As AddressPath from TBAddress a where contains(a.FullPath,@contains) and not exists(select 1 from TBAddress x where x.Parent=a.ID) order by AddressPathGo

procedure:up_SearchAddressByNameV2

5.4 測試存儲過程:

exec up_SearchAddressByNameV2 '廣 大'

sqlserver,性能優化,sqlserver性能優化

共返回195行記錄。

5.5 客戶端統計信息:

sqlserver,性能優化,sqlserver性能優化

平均的執行耗時:  20.4毫秒

6.測試,方法4

 直接使用Like對列FullPath進行查詢。

 6.1存儲過程代碼:

Use testGoif object_ID('[up_SearchAddressByNameV3]') is not null  Drop Procedure [up_SearchAddressByNameV3]Gocreate proc up_SearchAddressByNameV3(  @name nvarchar(200))Asset nocount ondeclare @sql nvarchar(max) declare @tmp Table (Name nvarchar(50)) set @Name=rtrim(rtrim(@Name)) while patindex('% %',@Name)>0begin  set @Name=replace(@Name,' ',' ')  end set @sql='select id,FullPath As AddressPath   from TBAddress a where not exists(select 1 from TBAddress x where x.Parent=a.ID)  ' set @sql +='And a.FullPath like ''%' +replace(@Name,' ','%'' And a.FullPath Like ''%')+'%'''exec (@sql) Go

procedure:up_SearchAddressByNameV3

6.2 測試存儲過程:

exec up_SearchAddressByNameV3 '廣 大'

sqlserver,性能優化,sqlserver性能優化

 共返回195行記錄。

6.3 客戶端統計信息

 sqlserver,性能優化,sqlserver性能優化

平均的執行耗時:  34毫秒

7.小結

這里通過一個簡單的表格,對方法1至方法4作比較。

 sqlserver,性能優化,sqlserver性能優化

從平均耗時方面分析,一眼就知道方法3比較符合開始的需求(耗時要控制在幾十毫秒內)。

當然還有其他的方法,如通過程序實現,把數據一次性加載至內存中,再通過程序寫的算法進行搜索,或通過其他工具如Lucene來實現。不管哪一種方法,我們都是選擇最優的方法。實際的工作經驗告訴我們,在實際應用中,多選擇和測試不同的方法來,選擇其中一個滿足我們環境的,而且是最優的方法。


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
日本黄色一区二区三区| 国产一级粉嫩xxxx| 日韩欧美三级在线| 国产欧美日韩精品综合| 亚洲 欧美 精品| 午夜亚洲一区| 欧美日韩综合色| 91精品xxx在线观看| 欧美日韩精品免费看| 一区二区在线看| 日韩中文字幕精品视频| 香蕉精品久久| 国产欧美日韩精品综合| 91精品视频在线| 欧美午夜影院在线视频| 欧美日韩精品综合| 日韩精品三级| 欧洲一级精品| 国产一卡2卡3卡四卡网站| av免费网站在线观看| 黄色一区二区在线| 欧美1234区| 日韩av综合在线观看| 国产日韩中文字幕| 欧美日韩亚洲国内综合网俺| 91精品婷婷国产综合久久竹菊| 中文字幕精品国产| 日韩三级视频在线| 在线日韩欧美| 国产欧美日韩在线观看| 午夜精品免费视频| 欧美日韩综合高清一区二区| 精品久久蜜桃| 91精品综合久久久久久| 久久激情一区| 国产又粗又猛又爽又黄91精品| 日韩精品三级| 亚洲欧洲国产视频| www在线播放| 日韩一级在线视频| 欧美日韩中文字幕综合视频| 在线观看国产一级片| 国产www在线观看| 日韩一级网站| 国产欧美亚洲一区| 久久久久久99精品| 欧美国产一级片| а√天堂中文在线资源8| 日本精品在线| 在线视频不卡一区二区| 日韩在线视频网| 国产欧美日韩不卡免费| 第一页在线观看| 中文字幕亚洲二区| 激情综合色综合久久| 日韩精品视频在线观看免费| 欧美国产中文| a视频免费看| 久久视频一区| 中文字幕在线国产| 精品国产乱码久久久久久牛牛| 日韩精品三级| 自拍日韩亚洲一区在线| 国产福利三区| 日韩欧美三级在线| 日韩欧美中文在线| 精品国产1区二区| 第一页在线观看| 99精品免费观看| 中文在线中文字幕| 欧美日韩国产高清视频| 日韩中文字幕精品视频| 91精品国产调教在线观看| 亚洲三级中文字幕| 国产精品视频福利一区二区| www日韩在线观看| 亚洲女人天堂色在线7777| 欧美国产小视频| 美日韩精品免费视频| 欧美日本精品在线| 在线欧美日韩精品| 精品一二三四| 色综合影院在线| 日韩欧美三级视频| 欧美日韩高清在线播放| 日韩国产成人| 日韩精品视频在线看| 刘玥91精选国产在线观看| 精品日韩av| 亚洲福利在线看| 欧美日韩亚州综合| 欧美日韩亚洲天堂| 日韩精品在线免费观看视频| 91色在线看| 欧美国产中文| 中文精品在线观看| 国产区高清在线| 久久久综合av| 99久久婷婷| 欧美日韩亚洲一区| 色一区在线观看| 国产视频一区二| 丰满少妇一区| 欧美日韩国产不卡在线看| 中文字幕亚洲在| 亚洲一区在线观看网站| 久艹在线视频| 欧美日韩国产三级| 一区二区在线看| 欧美三级在线看| 99精品一级欧美片免费播放| 国产福利免费在线观看| 日韩三区免费| 在线一区二区三区精品| 欧美日韩综合视频| 亚洲一区在线观看免费| 中文字幕综合在线| 亚洲狠狠婷婷综合久久久久图片| 亚洲欧洲日韩精品在线| 国产网站av| 久久久精品福利| 精品一区二区三区中文字幕| 国产嫩草影院久久久久| 天堂在线中文| 欧美国产日韩在线播放| 日韩黄色在线播放| 久99久视频| 亚洲高清中文字幕| 日韩免费精品视频| 在线视频你懂得一区| 高清日韩中文字幕| 91精品国产99| 国产福利一区在线观看| 日韩中文在线字幕| 日本亚洲视频在线| 亚洲第一精品在线| 欧美一卡2卡三卡4卡5免费| 在线综合 亚洲 欧美中文字幕| 日韩精品手机在线| 蜜桃久久av| 国产一级在线免费观看| 中文字幕最新精品| 91欧美日韩| 日韩中文欧美| 中文字幕欧美日韩在线| 91精品久久久久久久久| 国产乱码在线| 激情国产在线| 先锋男人资源站| 白嫩少妇丰满一区二区| 日韩免费视频一区二区| 精品视频www| 人成在线免费视频| 亚洲一级网站| 欧美国产三级| www.eeuss影院| 91精品国产色综合久久久蜜香臀| 综合激情国产一区| 精品国产免费观看一区| 亚洲人成欧美中文字幕| 国产午夜精品视频| 日韩久久精品视频| 欧美日韩亚洲综合| 国产成人精品999| 尤物av一区二区| 欧美日韩激情一区二区三区| 色综合久久六月婷婷中文字幕| 交视频在线观看国产| 日韩中文字幕网| 国产日韩在线视频| 欧美日韩日本视频| 欧美日韩成人一区二区| 欧美专区中文字幕| 91日韩中文字幕| 日韩激情一区| 亚洲图片小说综合| 久久精品一二三| 国产在线导航| 久久夜色精品国产欧美乱极品| 一级网站免费观看| 精品熟女一区二区三区| 天堂中文在线视频| 91久久精品国产91久久| 国产在线中文字幕| 一级免费a一片| 国产一卡二卡3卡4卡四卡在线| 日韩中文字幕视频在线| 99亚洲视频| 亚洲欧洲国产视频| 国产h片在线观看| 国产中文在线观看| 一本久久a久久精品亚洲| 在线亚洲人成| 欧美日韩国产综合视频在线观看中文| 日韩欧美中文| 亚洲免费看av| 一区二区三区精品在线观看| 亚洲 国产 欧美 日韩| 欧美日韩国产成人| 国产乱码午夜在线视频| 国产不卡精品在线| av免费网站在线观看| 日韩字幕在线观看| 欧美日韩中文另类| 久久激情中文| 欧美在线观看视频一区| 欧美日韩性视频一区二区三区| 亚洲一区二区三区精品中文字幕| 91精品视频播放| 日韩亚洲欧美中文三级| 欧美日韩高清在线| 91精品国产综合久久久久久 | 亚洲va韩国va欧美va精品| 蜜臀91精品国产高清在线观看| 欧美激情一区二区在线| 91精品蜜臀在线一区尤物| 国产一级视频| 99久热re在线精彩视频| 久久久99免费| 日韩精品大片| 精品亚洲永久免费| 欧美亚洲国产日韩| 国产超级va在线视频| 国产黄色在线| av免费网站在线观看| 国产精品一区二区三区免费观看| 亚洲一区二区三区精品中文字幕| 欧美中日韩在线| www高清在线视频日韩欧美| 欧美日韩视频免费播放| 免费视频国产一区| 日韩精品视频免费看| 日韩三级精品电影久久久| 日韩手机在线观看视频| 欧美日韩三级视频| 日韩欧美99| 国产嫩草影院久久久久| 国产91久久久久蜜臀青青天草二 | 久久99精品久久久| 91精品国产91久久久久久三级| 视频一区不卡| 91精品xxx在线观看| 亚洲日产av中文字幕| 精品人妻一区二区免费视频| 日韩中文字幕久久| 国产中文在线播放| 亚洲成在线观看| 亚洲福利一区二区三区| 欧美日韩在线播放视频| 快she精品国产999| 日韩一级二级三级精品视频| 日韩色在线观看| 国产三级做爰在线观看| 日韩视频一区二区在线观看| 欧美一级欧美三级在线观看| 亚洲一区激情| www.91香蕉视频| 国产欧美日韩亚洲| wwww亚洲| 精品中文字幕视频| 偷窥国产亚洲免费视频| 久久久精品99| 国产欧美日韩中文久久| 国产欧美日韩久久| 国产自产视频| 国产在线不卡一区| 日韩一级网站| 国产区在线看| 国产一区久久| 一区二区三区在线不卡| 欧美日韩中国免费专区在线看| 91精品国产综合久久久久久| 中文字幕在线欧美| 日韩黄色在线播放| 日韩在线视频二区| 在线视频日韩欧美| 欧美在线视频第一页| 欧美三级日本三级少妇99| 久久蜜桃一区二区| 欧美日韩激情在线一区二区三区 | 欧美日韩国产综合视频在线观看中文| 亚洲欧美日本另类| 国产日韩1区| 婷婷精品视频| 免费视频久久| 久久99久久久欧美国产| 久久久久久91| 国产在线小视频| 日韩不卡高清视频| 中文字幕欧美日韩| 91精品999| 欧美日韩综合在线| 久久99精品久久久久子伦| 欧美日韩在线视频免费观看| 欧美亚洲国产日韩2020| 欧美日韩成人综合| 精品久久在线| 国产欧美日韩精品高清二区综合区| 欧美熟妇乱码在线一区| 亚洲免费福利视频| 中文在线不卡| 国产一区二中文字幕在线看| 日韩在线视频免费观看高清中文| 精品国产1区二区| 一区三区视频| 亚洲福利视频在线| 国产91欧美| 亚洲视频 中文字幕| 久久精品99国产国产精| 精品国产999| 91欧美在线视频| 国产最新在线| 麻豆精品99| 91麻豆精品国产91久久久使用方法| 国产成人一区二区精品非洲| 国产欧美日韩视频在线| 不卡福利视频| 精品视频在线导航| 国产在线小视频| 国产一卡二卡3卡4卡四卡在线| 欧美国产综合在线V| 日韩国产亚洲欧美| 亚洲视频色图| av免费观看网站| 中文字幕日韩在线视频| 欧美亚洲视频在线看网址| 欧美三级在线视频| 久久香蕉精品| 亚洲国内精品视频| 国产欧美日韩中文久久| 日韩一级在线视频| 亚洲欧美日本国产专区一区| 欧美1234区| 久久婷婷国产| 国产亚洲视频中文字幕视频| 亚洲一区在线观看网站| 欧美日韩在线不卡一区| 久久99久久久欧美国产| 欧美不卡一二三| 中文字幕日韩高清| www.三级.com| 亚洲人成欧美中文字幕| 亚洲三级免费看| 一区二区三区久久| 国产偷国产偷亚洲清高网站| 免费高清在线一区| 欧美日韩国产第一页| 国产日韩精品久久久| 国产最顶级的黄色片在线免费观看| 亚洲最新永久观看在线| 国产在线导航| 欧美日韩精品免费在线观看视频| 国产一级视频| 日韩一级免费在线观看| 国产丝袜一区二区| 日韩在线中文视频| 国产中文在线视频| 一级片在线播放| 二区视频在线观看| 九九精品调教| 91精品国产综合久久蜜臀| 国产欧美综合在线观看第十页 | 一区二区日韩av| 国产一区高清视频| 欧美不卡123| 亚洲国产一区自拍| aa国产成人| 免费在线国产| 中文国产字幕在线观看| 国产三级在线播放| 精品色蜜蜜精品视频在线观看| 国产h片在线观看| wwwav91com| 日韩av综合在线观看| 久久综合久久综合九色| 国产一级在线播放| 天堂中文在线视频| 色综合久久88色综合天天免费| 中文字幕欧美日韩精品| 一区二区在线视频播放| 国产伦精品免费视频| 国产欧美自拍一区| 中文天堂资源在线| 久久精品99久久久久久久久| 视频一区视频二区中文| 欧美日韩乱国产| 日韩在线视频观看正片免费网站| 日本不卡免费高清视频| 顶级网黄在线播放| 欧美中文字幕视频在线观看 | 深夜福利亚洲| 日本黄色一区二区三区| 一区三区二区视频| 国产999在线观看| 日韩视频在线观看视频| 亚洲高清精品视频| 国产aa精品| 在线视频一区二区三区在线播放| 精品国产欧美成人夜夜嗨| 日韩欧美亚洲日产国|