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

การเขียนแบบสอบถามเพื่อร้องขอหรือเปลี่ยนแปลงข้อมูลที่เก็บไว้ในฐานข้อมูลหรือระบบการจัดการข้อมูลอื่น ๆ คำถามควรมีคำจำกัดความของตารางและดัชนีข้อมูลตัวอย่างผลลัพธ์ที่คาดหวังและแท็กสำหรับระบบเฉพาะ (เช่น MySQL, PostgreSQL, Oracle, SQL Server, MongoDB)

3
การสแกนที่ไม่คาดหมายระหว่างการลบโดยใช้ WHERE IN
ฉันมีคำถามดังนี้ DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN ( SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID IS NOT NULL ) tblFEStatsBrowsers มี 553 แถว tblFEStatsPaperHits มีแถว 47.974.301 tblFEStatsBrowsers: CREATE TABLE [dbo].[tblFEStatsBrowsers]( [BrowserID] [smallint] IDENTITY(1,1) NOT NULL, [Browser] [varchar](50) NOT NULL, [Name] [varchar](40) NOT NULL, [Version] [varchar](10) NOT NULL, …

3
มันเป็นความคิดที่ดี / วิธีการจัดทำดัชนีคอลัมน์ VARCHAR?
เรากำลังใช้ PostgreSQL v8.2.3 มีตารางที่เกี่ยวข้อง: พนักงานและEMAILLIST Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6) Table 2: EMAILLIST (email) มีการรวม 2 ตารางเข้าด้วยกันซึ่งหาก EMPLOYEE.EMAIL1 หรือ EMPLOYEE.EMAIL2 ไม่ได้เข้าคู่กันแถวเหล่านั้นจะถูกส่งกลับ SELECT employee.email1, employee.email2, e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched FROM employee LEFT JOIN emaillist e1 ON e1.email = employee.email1 …

3
วิธีการเลือกที่แตกต่างกันสำหรับหนึ่งคอลัมน์และในคอลัมน์อื่น?
ฉันต้องการสอบถามฐานข้อมูล SQL เพื่อค้นหาค่าที่แตกต่างทั้งหมดของหนึ่งคอลัมน์และฉันต้องการค่าที่กำหนดเองจากคอลัมน์อื่น ตัวอย่างเช่นพิจารณาตารางต่อไปนี้ที่มีสองคอลัมน์คีย์และค่า: key value === ===== one test one another one value two goes two here two also three example ฉันต้องการกลับแถวตัวอย่างหนึ่งแถวเลือกโดยพลจากคีย์ที่แตกต่างกันแต่ละอันบางทีรับสามแถวเหล่านี้: key value === ===== one test two goes three example ฉันจะกำหนดแบบสอบถามดังกล่าวใน SQL ได้อย่างไร
29 query 

5
การปรับแต่งข้อความค้นหาควรเป็นแบบเชิงรุกหรือแบบตอบโต้?
ในฐานะนักพัฒนาซอฟต์แวร์และ DBA ที่ต้องการฉันพยายามผสมผสานแนวปฏิบัติที่ดีที่สุดเมื่อฉันออกแบบฐานข้อมูล SQL Server ของฉัน (99% ของเวลาที่ซอฟต์แวร์ตั้งอยู่บน SQL Server) ฉันทำการออกแบบที่ดีที่สุดก่อนและระหว่างการพัฒนา แต่ก็เหมือนกับนักพัฒนาซอฟต์แวร์อื่น ๆ ที่มีการเพิ่มฟังก์ชันการทำงานข้อบกพร่องและเพียงแค่การเปลี่ยนแปลงข้อกำหนดที่ต้องการเปลี่ยนแปลง / สร้างวัตถุฐานข้อมูล คำถามของฉันคือควรปรับแต่งการค้นหาเชิงรุกหรือปฏิกิริยา? กล่าวอีกนัยหนึ่งไม่กี่สัปดาห์หลังจากมีการแก้ไขโค้ด / ฐานข้อมูลจำนวนมากฉันควรตั้งวันเพื่อตรวจสอบประสิทธิภาพการค้นหาและปรับแต่งตามนั้น ถึงแม้ว่ามันจะดูเหมือนว่าจะทำงานโอเค ? หรือฉันควรทราบว่าประสิทธิภาพต่ำกว่าค่าเฉลี่ยควรเป็นการตรวจสอบฐานข้อมูลและกลับไปที่กระดานดำที่เป็นสุภาษิต การปรับแต่งข้อความค้นหาอาจใช้เวลานานและขึ้นอยู่กับการออกแบบฐานข้อมูลเริ่มต้นซึ่งอาจมีประโยชน์น้อยที่สุด ฉันอยากรู้อยากเห็นเกี่ยวกับวิธีการทำงานที่ได้รับการยอมรับ

1
ทำไมไม่เข้ากับชุดที่มีค่า NULL จะคืนค่าเป็น FALSE / NULL เสมอ?
ฉันมีแบบสอบถาม (สำหรับ Postgres และ Informix) ที่มีส่วนNOT INคำสั่งย่อยที่มีแบบสอบถามย่อยในบางกรณีที่ส่งคืนNULLค่าทำให้ส่วนคำสั่งนั้น (และแบบสอบถามทั้งหมด) ไม่สามารถส่งคืนสิ่งใดได้ วิธีที่ดีที่สุดที่จะเข้าใจสิ่งนี้คืออะไร? ฉันคิดว่าNULLเป็นสิ่งที่ไม่มีค่าและดังนั้นจึงไม่ได้คาดหวังแบบสอบถามที่จะล้มเหลว NULLแต่เห็นได้ชัดว่าไม่ใช่วิธีที่ถูกต้องที่จะคิดว่า

2
ความแตกต่างระหว่าง GROUP BY B, A และ GROUP BY COALESCE (B, A)
ฉันสับสนตัวเองมาก มีใครบางคนกรุณาอธิบายภายใต้สถานการณ์ที่ฉันต้องการใช้ GROUP BY COALESCE ฉันเดาว่าฉันจะใช้มันถ้าฉันต้องการจัดกลุ่มชุดข้อมูลตามคอลัมน์ B แบบมีเงื่อนไข (ถ้า B ไม่ใช่โมฆะ) และคอลัมน์ A เป็นอย่างอื่น เสียงนั้นใช่ไหม
20 oracle  query 

3
ทางเลือกอื่นในการต่อสตริงหรือดำเนินการตามขั้นตอนเพื่อป้องกันการทำซ้ำรหัสแบบสอบถาม SQL?
คำเตือน: โปรดอดทนกับฉันในฐานะคนที่ใช้ฐานข้อมูลเพียงเล็กน้อยในเวลาทำงานของเขา (ส่วนใหญ่ฉันใช้การเขียนโปรแกรม C ++ ในงานของฉัน แต่ทุกเดือนที่แปลกฉันต้องค้นหา / แก้ไข / เพิ่มบางสิ่งในฐานข้อมูล Oracle) ฉันจำเป็นต้องเขียนแบบสอบถาม SQL ที่ซับซ้อนซ้ำ ๆ ทั้งสำหรับคิวรีแบบเฉพาะกิจและแบบสอบถามที่มีอยู่ในแอปพลิเคชัน การเขียนสิ่งที่น่ารังเกียจในภาษาโปรแกรมแบบดั้งเดิมจะทำให้คุณประสบปัญหาอย่างหนัก แต่ฉัน ( I ) ยังไม่สามารถหาเทคนิคที่เหมาะสมในการป้องกันการทำซ้ำรหัสแบบสอบถาม SQL แก้ไข: 1 ผมอยากจะขอบคุณ answerers ที่ให้การปรับปรุงที่ดีในการเดิมของฉันตัวอย่างเช่น อย่างไรก็ตามคำถามนี้ไม่เกี่ยวกับตัวอย่างของฉัน มันเกี่ยวกับการทำซ้ำในแบบสอบถาม SQL เป็นเช่นนี้คำตอบ ( JackP , ลีห์ ) เพื่อให้ห่างไกลจะได้งานที่ดีของการแสดงให้เห็นว่าคุณสามารถลด repetitiveness โดยการเขียนคำสั่งที่ดีกว่า อย่างไรก็ตามแม้แล้วคุณเผชิญ repetitiveness บางอย่างที่เห็นได้ชัดว่าไม่สามารถเอาออก: นี่เสมอ nagged ฉันกับ SQL ในภาษาการเขียนโปรแกรม "ดั้งเดิม" …

7
เลือกจุดเริ่มต้นและจุดสิ้นสุดของช่วงต่อเนื่องหลายช่วงอย่างมีประสิทธิภาพในแบบสอบถาม Postgresql
ฉันมีข้อมูลประมาณหนึ่งพันล้านแถวในตารางที่มีชื่อและจำนวนเต็มในช่วง 1-288 สำหรับชื่อที่กำหนดintทุกตัวจะไม่ซ้ำกันและไม่ใช่จำนวนเต็มเท่าที่เป็นไปได้ทั้งหมดในช่วงนั้น - ดังนั้นจึงมีช่องว่าง แบบสอบถามนี้สร้างกรณีตัวอย่าง: --what I have: SELECT * FROM ( VALUES ('foo', 2), ('foo', 3), ('foo', 4), ('foo', 10), ('foo', 11), ('foo', 13), ('bar', 1), ('bar', 2), ('bar', 3) ) AS baz ("name", "int") ฉันต้องการสร้างตารางการค้นหาที่มีแถวสำหรับแต่ละชื่อและลำดับของจำนวนเต็มต่อเนื่องกัน แต่ละแถวดังกล่าวจะประกอบด้วย: ชื่อ - ค่าของคอลัมน์ชื่อ เริ่มต้น - จำนวนเต็มแรกในลำดับ ท้ายที่ต่อเนื่องกัน - ค่าสุดท้ายใน ช่วงลำดับที่ต่อเนื่องกัน - …
19 query  postgresql 


7
การสำรวจเป็นวิธีเดียวในการอัปเดตข้อมูลแอปจากฐานข้อมูลหรือไม่
แอปพลิเคชันต้องมีข้อมูลที่อัปเดตใหม่จากฐานข้อมูลมากที่สุดเท่าที่จะทำได้ ในกรณีเช่นนี้มีวิธีอื่นในการรับข้อมูลนอกเหนือจากการจับเวลาตามขอ (สำรวจ) ฐานข้อมูลหรือไม่ ฉันทำงานกับ MS SQL Server 2008 (และ. NET applications + Entity Framework) แต่ฉันต้องการรับรู้เกี่ยวกับฐานข้อมูลประเภทอื่นเช่นกัน

3
การแจ้งเตือนเกี่ยวกับการสอบถามที่ยาวนานหรือการหยุดชะงักใน SQL Server 2008 R2
ฉันต้องการทราบว่ามีวิธีส่งการแจ้งเตือนเรื่องการหยุดชะงักหรือไม่ ถ้าเป็นเช่นนั้นจะต้องมีแบบสอบถามใด ฉันเข้าใจว่า SQL Server ดูแลการหยุดชะงักฉันเพียงต้องการข้อมูลเกี่ยวกับแบบสอบถามที่เกี่ยวข้อง ฉันพบสิ่งต่อไปนี้เพื่อกำหนดแบบสอบถามที่ใช้เวลานาน: SELECT creation_time ,last_execution_time ,total_physical_reads ,total_logical_reads ,total_logical_writes , execution_count , total_worker_time , total_elapsed_time , total_elapsed_time / execution_count avg_elapsed_time ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) …
15 query  deadlock 

4
รวมคอลัมน์จากหลายแถวเป็นแถวเดียว
ฉันได้customer_commentsแบ่งออกเป็นหลายแถวเนื่องจากการออกแบบฐานข้อมูลและสำหรับรายงานที่ฉันต้องรวมcommentsจากแต่ละที่ไม่ซ้ำกันidเป็นหนึ่งแถว ก่อนหน้านี้ฉันเคยลองบางสิ่งบางอย่างที่ทำงานกับรายการที่มีการคั่นจาก SELECT clause และเคล็ดลับCOALESCEแต่ฉันจำไม่ได้และต้องไม่บันทึกไว้ ฉันไม่สามารถทำให้มันทำงานได้ในกรณีนี้ดูเหมือนว่าจะทำงานในแถวเดียวเท่านั้น ข้อมูลมีลักษณะดังนี้: id row_num customer_code comments ----------------------------------- 1 1 Dilbert Hard 1 2 Dilbert Worker 2 1 Wally Lazy ผลลัพธ์ของฉันต้องมีลักษณะเช่นนี้: id customer_code comments ------------------------------ 1 Dilbert Hard Worker 2 Wally Lazy ดังนั้นสำหรับแต่ละrow_numผลลัพธ์จะมีแถวเดียวเท่านั้น row_numความคิดเห็นที่ควรจะรวมอยู่ในคำสั่งของ SELECTเคล็ดลับที่ถูกเชื่อมโยงข้างต้นนั้นใช้เพื่อให้ได้ค่าทั้งหมดสำหรับการสืบค้นที่เฉพาะเจาะจงเป็นหนึ่งแถว แต่ฉันไม่สามารถหาวิธีที่จะทำให้การทำงานเป็นส่วนหนึ่งของSELECTคำสั่งที่แยกแถวเหล่านี้ออกทั้งหมด ข้อความค้นหาของฉันต้องผ่านทั้งตารางด้วยตัวเองและออกแถวเหล่านี้ ฉันไม่ได้รวมมันไว้ในหลายคอลัมน์หนึ่งแถวสำหรับแต่ละแถวดังนั้นจึงPIVOTดูเหมือนไม่เกี่ยวข้อง

1
การประมาณค่าСardinalityของภาคที่ครอบคลุมบางส่วน
ในขณะนี้ฉันกำลังพยายามหาวิธีที่ SQL Server จะประเมินความสำคัญของช่วงของเพรดิเคตที่ครอบคลุมขั้นตอนฮิสโตแกรมบางส่วน บนอินเทอร์เน็ตด้วยความคิดเชิงสถิติสำหรับการคำนวณแบบตามลำดับขั้นและสถิติที่มีค่าฉันพบคำถามที่คล้ายกันและ Paul White ให้คำตอบที่น่าสนใจ ตามคำตอบของ Paul สูตรการประมาณค่า cardinality สำหรับ predicates> = และ> (ในกรณีนี้ฉันสนใจเฉพาะรุ่นตัวประมาณ Cardinality อย่างน้อย 120) ดังนี้: สำหรับ>: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * (F * (DISTINCT_RANGE_ROWS - 1))) สำหรับ> =: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * ((F * (DISTINCT_RANGE_ROWS - 1)) + 1)) ฉันทดสอบแอปพลิเคชันของสูตรเหล่านี้ในตาราง[การผลิต]. [TransactionHistory]ตารางของฐานข้อมูลAdventureWorks2014ตามกริยาช่วงโดยใช้คอลัมน์TransactionDateและช่วงวันที่และเวลาระหว่าง …

3
ความท้าทายในการค้นหา: การสร้างถังขนาดใหญ่ขึ้นอยู่กับการวัดที่ไม่นับจำนวนแถว
ฉันจะอธิบายปัญหาในแง่ของการโหลดรถบรรทุกจำนวนคงที่พร้อมคำสั่งเท่าที่จะทำได้ ปัจจัยการผลิต: @TruckCount - the number of empty trucks to fill ชุด: OrderId, OrderDetailId, OrderDetailSize, TruckId (initially null) Ordersประกอบด้วยหนึ่งหรือมากกว่าOrderDetailsนั้น ความท้าทายที่นี่คือการกำหนดให้TruckIdกับแต่ละระเบียน คำสั่งเดียวไม่สามารถแยกข้ามรถบรรทุกได้ รถบรรทุกควรจะเป็นอย่างเท่าเทียมกัน * sum(OrderDetailSize)โหลดเป็นไปได้ที่วัดโดย * สม่ำเสมอ: เดลต้าที่เล็กที่สุดที่ทำได้ระหว่างรถบรรทุกที่มีน้ำหนักน้อยที่สุดและรถบรรทุกที่โหลดมากที่สุด ตามคำจำกัดความนี้ 1,2,3 จะกระจายอย่างเท่าเทียมกันมากกว่า 1,1,4 ถ้ามันช่วยคุณแกล้งทำเป็นอัลกอริทึมสถิติสร้างฮิสโตแกรมความสูงได้ ไม่มีการพิจารณาน้ำหนักบรรทุกสูงสุด เหล่านี้เป็นรถบรรทุกยืดหยุ่นวิเศษ อย่างไรก็ตามจำนวนรถบรรทุกได้รับการแก้ไขแล้ว มีวิธีแก้ปัญหาที่ชัดเจนซึ่งซ้ำแล้วซ้ำอีก - โรบินกลมจัดสรรคำสั่งซื้อ แต่มันสามารถทำได้ตามตรรกะที่ตั้งไว้? ความสนใจหลักของฉันคือ SQL Server 2014 หรือใหม่กว่า แต่การตั้งค่าโซลูชันพื้นฐานสำหรับแพลตฟอร์มอื่น ๆ ก็น่าสนใจเช่นกัน นี่ให้ความรู้สึกเหมือนดินแดน Itzik Ben-Gan …

3
ปรับแต่งประสิทธิภาพของแบบสอบถาม
เมื่อคุณเขียนเคียวรี / proc / ฟังก์ชันที่จัดเก็บไว้แล้ววิธีที่ให้ข้อมูลมากที่สุดในการรับพารามิเตอร์ประสิทธิภาพคืออะไร คุณเรียกใช้คิวรีและดูแผนการดำเนินการจริงหรือไม่ ถ้าเป็นเช่นนั้นสิ่งที่คุณมองหาคืออะไร? เห็นได้ชัดว่าการสแกนตาราง / ดัชนีเป็นบิตที่นิยม แต่มีอะไรอีกบ้าง

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