คำถามติดแท็ก join

ส่วนการเข้าร่วม SQL รวมระเบียนจากสองตารางหรือมากกว่าหรือมุมมอง

2
จะปรับปรุงการประมาณแถวได้อย่างไรเพื่อลดโอกาสของการหกถึง tempdb
ฉันสังเกตเห็นว่าเมื่อมีการรั่วไหลของเหตุการณ์ tempdb (ทำให้เกิดการสืบค้นที่ช้า) ซึ่งบ่อยครั้งที่การประมาณแถวนั้นเป็นวิธีการปิดการเข้าร่วมแบบเฉพาะ ฉันเคยเห็นเหตุการณ์การรั่วไหลเกิดขึ้นจากการรวมและแฮชรวมและพวกเขามักจะเพิ่มรันไทม์ 3x เป็น 10x คำถามนี้เกี่ยวข้องกับวิธีปรับปรุงการประมาณการแถวภายใต้สมมติฐานว่าจะลดโอกาสการเกิดเหตุการณ์หก จำนวนแถวจริง 40k สำหรับแบบสอบถามนี้แผนจะแสดงค่าประมาณแถวที่ไม่ดี (11.3 แถว): select Value from Oav.ValueArray where ObjectId = (select convert(bigint, Value) NodeId from Oav.ValueArray where PropertyId = 3331 and ObjectId = 3540233 and Sequence = 2) and PropertyId = 2840 option (recompile); สำหรับแบบสอบถามนี้แผนแสดงการประมาณแถวที่ดี (56k แถว): declare @a …

5
เต็มรูปแบบเข้าร่วมใน MS Access
ฉันมีรายชื่อพนักงานสองคน: List A: StaffID Supervisor ==================== 0001234 NULL 0001235 0001234 0001237 0001234 0001239 0001237 และ List B: StaffID Supervisor ==================== 0001234 NULL 0001235 0001234 0001238 0001235 0001239 0001235 และฉันต้องการผลลัพธ์ต่อไปนี้: StaffID SupervisorA SupervisorB =================================== 0001234 NULL NULL 0001235 0001234 0001234 0001237 0001234 NULL 0001238 NULL 0001235 0001239 0001237 0001235 โปรดสังเกตว่ารหัสพนักงานจากรายการ A …
11 query  join  ms-access 

3
มีเอ็นจิ้นฐานข้อมูลใดที่จะไม่เหมาะสมกับเงื่อนไขการเข้าร่วมตามคีย์ต่างประเทศที่มีอยู่
มันแปลกสำหรับฉันที่เมื่อฉันกำหนดคีย์ต่างประเทศแล้วเอ็นจินไม่สามารถใช้ข้อมูลนี้เพื่อค้นหานิพจน์ JOIN ที่ถูกต้องโดยอัตโนมัติ แต่ต้องการให้ฉันพิมพ์ประโยคเดิมซ้ำอีกครั้ง มีฐานข้อมูลใดบ้างหรืออาจเป็นโครงการวิจัยบางประเภทที่จะตรวจสอบคีย์ต่างประเทศที่มีอยู่

3
MySQL: การเข้าร่วมใดดีกว่าระหว่างการเข้าร่วมด้านนอกด้านซ้ายและการเข้าร่วมภายใน
การเข้าร่วมใดจะดีกว่าการแสดงผลหากพวกเขาทั้งหมดให้ผลลัพธ์เดียวกัน ตัวอย่างเช่นผมมีสองตารางและemployees(emp_id,name, address, designation, age, sex) work_log(emp_id,date,hours_wored)เพื่อให้ได้ผลลัพธ์ที่เฉพาะเจาะจงทั้งสองinner joinและleft joinให้ผลลัพธ์เดียวกัน แต่ฉันยังมีข้อสงสัยบางอย่างที่ไม่ จำกัด เฉพาะคำถามนี้เท่านั้น การเข้าร่วมใดที่มีประสิทธิภาพมากกว่าซึ่งควรเลือกในกรณีที่มีค่าผลลัพธ์เดียวกัน ปัจจัยอื่น ๆ ที่ต้องพิจารณาในเวลาที่สมัครเข้าร่วมมีอะไรบ้าง มีความสัมพันธ์ระหว่างการเข้าร่วมภายในกับการเข้าร่วมไขว้ไหม?

2
อัปเดตคอลัมน์ด้วยข้อมูลจากตารางอื่น
ฉันกำลังทำงานกับปัญหาที่ซับซ้อน แต่ฉันจะทำให้ปัญหานี้ง่ายขึ้น ฉันมีสองตาราง A [ID, column1, column2, column3] B [ID, column1, column2, column3, column4] และฉันต้องการอัปเดตที่สาม: C [ID, column1, column2,column3] ฉันกำลังปรับปรุงตารางที่สามโดยใช้แบบสอบถามนี้ UPDATE C set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab from (select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab from A, B limit 1; ) as t ; ฉันได้: UPDATE 0 …

1
การเปรียบเทียบประสิทธิภาพระหว่างการใช้ฟังก์ชั่นเข้าร่วมและหน้าต่างเพื่อรับค่านำและระยะเวลาล่าช้า
ผมมีตารางที่มีแถว 20M และแต่ละแถวมี 3 คอลัมน์: time, และid valueสำหรับแต่ละidและtimeมีvalueสถานะ ฉันต้องการทราบว่านำและล่าช้าค่าของบางอย่างสำหรับการที่เฉพาะเจาะจงtimeid ฉันใช้สองวิธีเพื่อให้ได้สิ่งนี้ วิธีการหนึ่งคือการใช้เข้าร่วมและอีกวิธีหนึ่งคือการใช้ฟังก์ชั่นหน้าต่างนำ / ล่าช้ากับดัชนีคลัสเตอร์บนและtimeid ฉันเปรียบเทียบประสิทธิภาพของสองวิธีนี้ตามเวลาดำเนินการ วิธีการเข้าร่วมใช้เวลา 16.3 วินาทีและวิธีฟังก์ชั่นหน้าต่างใช้เวลา 20 วินาทีโดยไม่รวมเวลาในการสร้างดัชนี สิ่งนี้ทำให้ฉันประหลาดใจเพราะฟังก์ชั่นหน้าต่างดูเหมือนจะก้าวหน้าในขณะที่วิธีการเข้าร่วมนั้นดุร้าย นี่คือรหัสสำหรับสองวิธี: สร้างดัชนี create clustered index id_time on tab1 (id,time) เข้าร่วมวิธีการ select a1.id,a1.time a1.value as value, b1.value as value_lag, c1.value as value_lead into tab2 from tab1 a1 left join tab1 b1 …

3
การใช้ LIMIT ปรับปรุงประสิทธิภาพและเห็นได้ชัดเจนหรือไม่
ฉันต้องการที่จะเข้าใจต่อไปนี้ สมมติว่าฉันมีแบบสอบถามที่ซับซ้อนด้วยสมมติว่าเข้าร่วม 5 กลุ่มตารางโดยสรุปและสั่งซื้อโดย ปล่อยให้การปรับให้เหมาะสมกับแบบสอบถามตัวเองเช่นดัชนี ฯลฯ มีประสิทธิภาพการทำงานที่สำคัญใช้LIMIT? ฉันคิดว่าแบบสอบถามทั้งหมด (และผลลัพธ์) ต้องได้รับการประมวลผลก่อนที่จะใช้ LIMIT ดังนั้นการใช้ LIMIT เพื่อดึงชุดย่อยของผลลัพธ์นี้มีการปรับปรุงที่สำคัญ / ที่สังเกตเห็นได้หรือไม่?

1
ทำไมการเข้าร่วมการกำจัดไม่ทำงานกับ sys.query_store_plan
ต่อไปนี้เป็นการทำให้เข้าใจง่ายของปัญหาประสิทธิภาพที่พบกับ Query Store: CREATE TABLE #tears ( plan_id bigint NOT NULL ); INSERT #tears (plan_id) VALUES (1); SELECT T.plan_id FROM #tears AS T LEFT JOIN sys.query_store_plan AS QSP ON QSP.plan_id = T.plan_id; plan_idคอลัมน์เป็นเอกสารที่เป็นคีย์หลักของsys.query_store_planแต่แผนปฏิบัติการไม่ได้ใช้เข้าร่วมการกำจัดเป็นที่คาดว่าจะ: ไม่มีการคาดการณ์คุณลักษณะจาก DMV คีย์หลัก DMV plan_idไม่สามารถซ้ำแถวจากตารางชั่วคราวได้ A LEFT JOINถูกใช้ดังนั้นจึงไม่Tสามารถลบแถวออกได้ แผนการดำเนินการ เหตุใดจึงเป็นเช่นนี้และสิ่งใดที่สามารถทำได้เพื่อรับการเข้าร่วมการกำจัดที่นี่

3
ทำไม Full Outer Join นี้ไม่ทำงาน?
ฉันเคยใช้ Full Outer Joins มาก่อนเพื่อให้ได้ผลลัพธ์ที่ต้องการ แต่บางทีฉันอาจไม่เข้าใจแนวคิดอย่างเต็มที่เพราะฉันไม่สามารถบรรลุสิ่งที่ควรเข้าร่วมอย่างง่าย ฉันมี 2 ตาราง (ซึ่งฉันจะเรียก t1 และ t2) โดยมี 2 ฟิลด์แต่ละฟิลด์: t1 Policy_Number Premium 101 15 102 7 103 10 108 25 111 3 T2 Policy_Number Loss 101 5 103 9 107 20 สิ่งที่ฉันพยายามทำคือรับผลรวมของพรีเมี่ยมและผลรวมของการสูญเสียจากทั้งสองตารางและ Policy_Number รหัสที่ฉันใช้คือ: select sum(premium) Prem_Sum, sum(Loss) Loss_Sum, t1.policynumber from t1 full …

3
การรวมด้านซ้ายของ Oracle และตำแหน่งข้อผิดพลาด
CREATE TABLE "ATABLE1" ( "COLUMN1" VARCHAR2(20 BYTE), "COLUMN2" VARCHAR2(20 BYTE) ); CREATE TABLE "ATABLE2" ( "COLUMN1" VARCHAR2(20 BYTE), "COLUMN2" VARCHAR2(20 BYTE) ); Insert into ATABLE1 (COLUMN1,COLUMN2) values ('A','1'); Insert into ATABLE1 (COLUMN1,COLUMN2) values ('B','2'); Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A',null); Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A','1'); Insert into ATABLE2 (COLUMN1,COLUMN2) …
10 oracle  join 

1
ไวยากรณ์ของ INNER JOIN ซ้อนอยู่ภายใน OUTER JOIN เปรียบเทียบกับผลการสืบค้น
TLDR; หากคุณดูที่แผนปฏิบัติการ 2 แบบมีคำตอบที่ง่ายกว่ากันหรือไม่? ฉันไม่ได้ตั้งใจสร้างดัชนีเพื่อให้ง่ายต่อการดูว่าเกิดอะไรขึ้น การติดตามคำถามก่อนหน้าของฉันที่เราพบความแตกต่างของประสิทธิภาพการค้นหาระหว่างสไตล์การเข้าร่วมที่แตกต่างกัน (เช่นซ้อนกับดั้งเดิม) ฉันได้ตระหนักว่าไวยากรณ์ที่ซ้อนกันยังปรับเปลี่ยนพฤติกรรมของแบบสอบถาม พิจารณา 2 แบบสอบถามต่อไปนี้ SELECT a.*, m.*, n.* FROM dbo.Autos a LEFT JOIN dbo.Models m JOIN dbo.Manufacturers n -- <-- Nested INNER JOIN ON n.ManufacturerID = m.ManufacturerID ON m.ModelID = a.ModelID สิ่งนี้ไม่จำเป็นต้องทำให้ผู้ผลิตเข้าร่วมเพื่อรวมแถว auto กับ ModelID ที่ไม่ได้อยู่ในตาราง Models การใช้ไวยากรณ์แบบดั้งเดิมเราต้องเปลี่ยนการเข้าร่วมเป็นผู้ผลิตเป็นการรวมภายนอกเช่น ... แต่สิ่งนี้เปลี่ยนแผนแบบสอบถาม SELECT a.*, m.*, …

1
ทำไมเราไม่สามารถทำการเชื่อมต่อในฐานข้อมูลแบบกระจายเช่น Bigtable ได้?
จากคำตอบนี้ไปที่ "Google ใช้ฐานข้อมูลใด" : Bigtable ไม่ใช่ฐานข้อมูลเชิงสัมพันธ์ ไม่รองรับการเชื่อมต่อและไม่รองรับการสืบค้นที่คล้ายกับ SQL ชัดเจนหรือไม่ ฉันไม่เข้าใจว่าทำไม

3
วิธีการใบ้การเข้าร่วมหลายคนใน SQL Server
ฉันมี 3 "ใหญ่" ตารางที่เข้าร่วมในคอลัมน์ (ทั้งสองint) ตารางที่ 1 มีประมาณ 200 ล้านแถว ตารางที่ 2 มีประมาณ 1.5 ล้านแถว ตารางที่ 3 มีประมาณ 6 ล้านแถว แต่ละตารางมีดัชนีคลัสเตอร์บนKey1, Key2และจากนั้นหนึ่งคอลัมน์อื่น ๆ Key1มี cardinality ต่ำและเบ้มาก มันถูกอ้างอิงอยู่เสมอในWHEREข้อ Key2ไม่เคยถูกกล่าวถึงในWHEREข้อ การเข้าร่วมแต่ละครั้งมีหลายต่อหลายคน ปัญหาเกิดขึ้นจากการประมาณเชิงปริมาณ การประมาณผลลัพธ์ของการรวมแต่ละครั้งจะเล็กลงแทนที่จะใหญ่ขึ้น ซึ่งจะส่งผลในการประมาณการขั้นสุดท้ายของหลายร้อยต่ำเมื่อผลลัพธ์ที่แท้จริงเป็นล้าน มีวิธีใดบ้างที่ฉันจะรู้ว่า CE เป็นตัวประมาณการที่ดีกว่า? SELECT 1 FROM Table1 t1 JOIN Table2 t2 ON t1.Key1 = t2.Key1 AND t1.Key2 = …

2
เรียกใช้แบบสอบถามที่ซับซ้อนสำหรับทุกวันในช่วง
ฉันมีตารางคำสั่งซื้อแล้ว Column | Type | Modifiers ------------+-----------------------------+----------------------------------------------------- id | integer | not null default nextval('orders_id_seq'::regclass) client_id | integer | not null start_date | date | not null end_date | date | order_type | character varying | not null ข้อมูลมีคำสั่งยืนไม่ทับซ้อนกันสำหรับ client_id และบางครั้งคำสั่งชั่วคราวที่แทนที่คำสั่งหยุดงานใน start_date เมื่อพวกเขามี client_id ที่ตรงกัน มีข้อ จำกัด ในระดับแอปพลิเคชันทำให้คำสั่งซื้อประเภทเดียวกันไม่ทับซ้อนกัน id | …

2
MySQL: ลบ…ใน .. ใน () เทียบกับลบ .. จาก .. เข้าร่วมและล็อคตารางเมื่อลบด้วยการเลือกย่อย
คำเตือน: โปรดแก้ตัวความรู้ของฉันเกี่ยวกับฐานข้อมูลภายใน นี่มันไป: เราเรียกใช้แอปพลิเคชั่น (ไม่ได้เขียนโดยเรา) ซึ่งมีปัญหาประสิทธิภาพการทำงานใหญ่ในงานล้างข้อมูลเป็นระยะในฐานข้อมูล แบบสอบถามมีลักษณะดังนี้: delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); ตรงไปตรงมา SQL ที่อ่านง่ายและมาตรฐาน แต่น่าเสียดายที่ช้ามาก การอธิบายเคียวรีแสดงว่าไม่ได้ใช้ดัชนีที่VARIABLE_SUBSTITUTION.BUILDRESULTSUMMARY_IDมีอยู่: mysql> explain delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( -> select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY -> where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); | id | select_type …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.