电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Oracle 10g(10.1.0.2)中的OPTIMIZER_INDEX_COST_ADJ

瀏覽:163日期:2023-11-15 14:52:01
Oracle 10g(10.1.0.2)中的OPTIMIZER_INDEX_COST_ADJ Tom Kyte的新書Effective Oracle by Design的第6章 Getting the Most Out of the Cost-Based Optimizer中介紹了參數OPTIMIZER_INDEX_COST_ADJ,并認為可以理解為Oracle執行多塊(MultiBlock)I/O(比如全表掃描)的代價與執行單塊(Single-block)I/O代價的相對比例。Tom指出,9i下該參數缺省值為100,意即二者擁有相同的代價,若減小,則CBO傾向于使用索引(即單塊I/O),反之則傾向于全表掃描(多塊I/O)。Tom同樣給出了一個不錯的例子。 在自己的手提上試驗了一下,硬盤大小原因,只裝了一個Oracle 10g(10.1.0.2),誰知就發現該參數在10g下取值發生了改變。我們先來看一下參照Tom的實驗: A. 創建數據表。 SQL> drop table t1; 表已刪除。 SQL> drop table t2; 表已刪除。 SQL> create table t1 2; as 3; select mod(rownum,1000) id,rpad('x',300,'x') data 4; from all_objects 5; where rownum<=5000; 表已創建。 SQL> ed 已寫入 file afiedt.buf 1; create table t2 2; as 3; select rownum id,rpad('x',300,'x') data 4; from all_objects 5* where rownum<=1000 SQL> / 表已創建。 B.創建索引并分析。 SQL> create index idx_t1 on t1(id); 索引已創建。 SQL> create index idx_t2 on t2(id); 索引已創建。 SQL> ed 已寫入 file afiedt.buf 1; begin 2;dbms_stats.gather_table_stats 3;(user,'T1',method_opt=>'for all indexed columns',cascade=>true); 4;dbms_stats.gather_table_stats 5;(user,'T2',method_opt=>'for all indexed columns',cascade=>true); 6* end; SQL> / PL/SQL 過程已成功完成。 C.查詢缺省值,并設置好環境。 SQL> set autot off SQL> show parameters optimizer_index_cost_adj; NAME TYPE;;;;;VALUE; ------------------------------------ ----------- ------------------------------ optimizer_index_cost_adj;;integer;;100; SQL> set autot traceonly eXP stat; D.在缺省值下查詢的結果。 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=13 Card=5 Bytes=1000; );; 1;0TABLE Access (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=2 Card; =1 Bytes=100) 2;1;;NESTED LOOPS (Cost=13 Card=5 Bytes=1000); 3;2;;;;TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=3 Card=5 Bytes=500);; 4;3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=; 5); 5;2;;;;INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1); 統計信息 ----------------------------------------------------------;;; 367; recursive calls; 0; db block gets;;; 101; consistent gets; 0; physical reads;; 0; redo size; 1507; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 12; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;;; E.修改參數值,注重,引用Tom的結論,9i中這個值在0-100之間,而10g呢? SQL> alter session set optimizer_index_cost_adj=0; ERROR: ORA-00068: 值 0 對參數 optimizer_index_cost_adj 無效, 必須在 1 和 10000 之間 SQL> alter session set optimizer_index_cost_adj=1; 會話已更改。 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=5 Bytes=1000); 1;0TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=1 Card; =1 Bytes=100) 2;1;;NESTED LOOPS (Cost=2 Card=5 Bytes=1000) 3;2;;;;TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=1 Card=5 Bytes=500);; 4;3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=; 5); 5;2;;;;INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1); 統計信息 ----------------------------------------------------------;;; 1; recursive calls; 0; db block gets;;; 48; consistent gets; 0; physical reads;; 0; redo size; 1507; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; SQL> alter session set optimizer_index_cost_adj=50; 會話已更改。 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=7 Card=5 Bytes=1000); 1;0TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=1 Card; =1 Bytes=100) 2;1;;NESTED LOOPS (Cost=7 Card=5 Bytes=1000) 3;2;;;;TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=2 Card=5 Bytes=500);; 4;3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=; 5); 5;2;;;;INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1); 統計信息 ----------------------------------------------------------;;; 1; recursive calls; 0; db block gets;;; 48; consistent gets; 0; physical reads;; 0; redo size; 1507; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; F.繼續修改參數值,改大。 SQL> alter session set optimizer_index_cost_adj=200; 會話已更改。 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=26 Card=5 Bytes=1000; );; 1;0TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=4 Card; =1 Bytes=100) 2;1;;NESTED LOOPS (Cost=26 Card=5 Bytes=1000); 3;2;;;;TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=6 Card=5 Bytes=500);; 4;3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=; 5); 5;2;;;;INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1); 統計信息 ----------------------------------------------------------;;; 1; recursive calls; 0; db block gets;;; 48; consistent gets; 0; physical reads;; 0; redo size; 1507; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; SQL> alter session set optimizer_index_cost_adj=500; 會話已更改。 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=63 Card=5 Bytes=1000; );; 1;0TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=10 Car; d=1 Bytes=100);;;;; 2;1;;NESTED LOOPS (Cost=63 Card=5 Bytes=1000); 3;2;;;;TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=13 Card=5 By; tes=500);;; 4;2;;;;INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1); 統計信息 ----------------------------------------------------------;;; 1; recursive calls; 0; db block gets;;; 90; consistent gets; 0; physical reads;; 0; redo size; 1507; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; SQL> alter session set optimizer_index_cost_adj=1000; 會話已更改。 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=66 Card=5 Bytes=1000; );; 1;0HASH JOIN (Cost=66 Card=5 Bytes=1000);;;; 2;1;;TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=13 Card=5 Byte; s=500);;;;; 3;1;;TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=52 Card=26 Byt; es=2600);;; 統計信息 ----------------------------------------------------------;;; 1; recursive calls; 0; db block gets;;; 271; consistent gets; 213; physical reads;; 0; redo size; 1651; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; SQL> alter session set optimizer_index_cost_adj=10000; 會話已更改。 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=66 Card=5 Bytes=1000; );; 1;0HASH JOIN (Cost=66 Card=5 Bytes=1000);;;; 2;1;;TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=13 Card=5 Byte; s=500);;;;; 3;1;;TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=52 Card=26 Byt; es=2600);;; 統計信息 ----------------------------------------------------------;;; 1; recursive calls; 0; db block gets;;; 271; consistent gets; 0; physical reads;; 0; redo size; 1651; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; G.現在看看對性能的影響。 SQL> set timing on SQL> alter session set optimizer_index_cost_adj=100; 會話已更改。 已用時間:; 00: 00: 00.00 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 已用時間:; 00: 00: 00.02 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=13 Card=5 Bytes=1000; );; 1;0TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=2 Card; =1 Bytes=100) 2;1;;NESTED LOOPS (Cost=13 Card=5 Bytes=1000); 3;2;;;;TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=3 Card=5 Bytes=500);; 4;3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=; 5); 5;2;;;;INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1); 統計信息 ----------------------------------------------------------;;; 0; recursive calls; 0; db block gets;;; 48; consistent gets; 0; physical reads;; 0; redo size; 1507; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; SQL> alter session set optimizer_index_cost_adj=1; 會話已更改。 已用時間:; 00: 00: 00.00 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 已用時間:; 00: 00: 00.02 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=5 Bytes=1000); 1;0TABLE ACCESS (BY INDEX ROWID) OF 'T1' (TABLE) (Cost=1 Card; =1 Bytes=100) 2;1;;NESTED LOOPS (Cost=2 Card=5 Bytes=1000) 3;2;;;;TABLE ACCESS (BY INDEX ROWID) OF 'T2' (TABLE) (Cost=1 Card=5 Bytes=500);; 4;3 INDEX (RANGE SCAN) OF 'IDX_T2' (INDEX) (Cost=2 Card=; 5); 5;2;;;;INDEX (RANGE SCAN) OF 'IDX_T1' (INDEX) (Cost=1 Card=1); 統計信息 ----------------------------------------------------------;;; 0; recursive calls; 0; db block gets;;; 48; consistent gets; 0; physical reads;; 0; redo size; 1507; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; SQL> alter session set optimizer_index_cost_adj=10000; 會話已更改。 已用時間:; 00: 00: 00.00 SQL> ed 已寫入 file afiedt.buf 1; select * from t1,t2 2; where t1.id=t2.id 3*and t2.id between 50 and 55 SQL> / 已選擇30行。 已用時間:; 00: 00: 00.03 執行計劃 ----------------------------------------------------------;;; 0;;;SELECT STATEMENT Optimizer=CHOOSE (Cost=66 Card=5 Bytes=1000; );; 1;0HASH JOIN (Cost=66 Card=5 Bytes=1000);;;; 2;1;;TABLE ACCESS (FULL) OF 'T2' (TABLE) (Cost=13 Card=5 Byte; s=500);;;;; 3;1;;TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=52 Card=26 Byt; es=2600);;; 統計信息 ----------------------------------------------------------;;; 0; recursive calls; 0; db block gets;;; 271; consistent gets; 0; physical reads;; 0; redo size; 1651; bytes sent via SQL*Net to client 523; bytes received via SQL*Net from client;; 3; SQL*Net roundtrips to/from client; 0; sorts (memory);; 0; sorts (disk);;;; 30; rows processed;; 來具體分析一下。 首先,10g中OPTIMIZER_INDEX_COST_ADJ的取值范圍發生了改變。9i中為0-100,而10g中為1-10000。 其次,由于測試環境的不同,Tom的測試結果是在缺省值(100)的環境下,就已經和上面取值500時一樣了,即對T2全表掃描而T1使用索引。Tom試驗中,減小取值直至0,訪問路徑就變成使用兩個索引,而并不會出現均不使用索引的情況。除去系統的不同(可能導致取缺省值時訪問路徑是否一致),只看變化趨勢,顯然10g中靈活性更高,1-10000的取值使得CBO可以覆蓋所有的訪問路徑。另一方面,正如Tom的結論所說,OPTIMIZER_INDEX_COST_ADJ的取值越大,優化器越傾向于使用全表掃描,取值越小,優化器越傾向于使用索引。 再次,我們對比相同訪問路徑下的不同點。在取值從1變化到200(1-50-100-200)的過程中,優化器計算出的代價是持續增長的,而從1000到10000則是不變的。這說明這個參數與索引I/O的代價有關,而和全表掃描并無關系,這與Tom所說的并不矛盾,不過顯然更精確一點。 最后我們其實應該看到,雖然有如上所說的代價變化問題,同一訪問路徑下實際的運行性能并無區別,由于數據量比較小,上面的例子也許不能很好的說明這一點,不過想想Oracle用相同的路徑去執行,也沒有理由不同性能吧。 好,來看看官方文檔吧。10G的官方文檔(Reference)中對這個參數描述如下: OPTIMIZER_INDEX_COST_ADJ Parameter type Integer;參數類型為整數 Default value 100 缺省值為100 Modifiable ALTER SESSION, ALTER SYSTEM; 可通過ALTER SESSION, ALTER SYSTEM來修改 Range of values 1 to 10000取值范圍是1-10000 OPTIMIZER_INDEX_COST_ADJ lets you tune optimizer behavior for access path selection to be more or less index friendly—that is, TO MAKE THE OPTIMIZER MORE OR LESS PRONE TO SELECTING AN INDEX ACCESS PATH OVER A FULL TABLE SCAN. The default for this parameter is 100 percent, at which the optimizer evaluates index access paths at the regular cost. Any other value makes the optimizer evaluate the access path at that percentage of the regular cost. For example, a setting of 50 makes the index access path look half as expensive as normal. Note: The adjustment does not apply to user-defined cost functions for domain indexes. 注重:調整對用戶為域索引自定義的代價函數無效。 描述的第一段正證實了參數的作用。第二段值得注重,正如Tom所說(我覺得假如他把原文versus前后顛倒一下會更好,即單塊I/O代價比之多塊I/O),參數表達了索引訪問代價對比普通(表掃描)代價的比值。不過還有一個疑問我暫時還沒辦法想通,什么條件下索引I/O居然比掃描慢100倍(取值10000)? 結論: OPTIMIZER_INDEX_COST_ADJ通過指明索引I/O代價與掃描全表I/O代價的相對比值來影響CBO的行為,取值越小,CBO越傾向于使用索引,取值越大,越傾向于全表掃描。而缺省值100,指明缺省下,二者的代價是相等。與9i不同的是,10g中OPTIMIZER_INDEX_COST_ADJ的取值范圍從0-100改為1-10000,相信是更合理的取值(至少按照文檔的說明,作為代價的比值,取0是不合適的,除非說索引I/O的代價相對于全表掃描I/O代價是無窮小的)。
標簽: Oracle 數據庫
主站蜘蛛池模板: 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 样品瓶(色谱样品瓶)百科-浙江哈迈科技有限公司 | 【孔氏陶粒】建筑回填陶粒-南京/合肥/武汉/郑州/重庆/成都/杭州陶粒厂家 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 圆周直径尺-小孔内视镜-纤维研磨刷-东莞市高腾达精密工具 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 脱硫搅拌器厂家-淄博友胜不锈钢搅拌器厂家 | 四探针电阻率测试仪-振实密度仪-粉末流动性测定仪-宁波瑞柯微智能 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 双吸泵,双吸泵厂家,OS双吸泵-山东博二泵业有限公司 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 芝麻黑-芝麻黑石材厂家-永峰石业 | 烟台螺纹,烟台H型钢,烟台钢材,烟台角钢-烟台市正丰金属材料有限公司 | 浙江美尔凯特智能厨卫股份有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 防爆暖风机_防爆电暖器_防爆电暖风机_防爆电热油汀_南阳市中通智能科技集团有限公司 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 高压负荷开关-苏州雷尔沃电器有限公司 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 陕西华春网络科技股份有限公司| 北京软件开发_软件开发公司_北京软件公司-北京宜天信达软件开发公司 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 耐高温电缆厂家-远洋高温电缆 | 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 |