ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

1
วิธีการส่งออกฐานข้อมูล mysql ตามเงื่อนไขที่
ฉันต้องการส่งออกข้อมูลและโครงสร้างของตาราง แต่ข้อมูลจะต้องมีเงื่อนไขเฉพาะ (สถานะ WHERE = 0 และ id> 20) วิธีการส่งออกฐานข้อมูล mysql ขึ้นอยู่กับเงื่อนไขจาก phpMyAdmin หรืออะไร

2
ความสัมพันธ์แบบหนึ่งต่อหนึ่งเป็นมาตรฐานหรือไม่
พิจารณาว่าเรามีชุดข้อมูลสถิติขนาดใหญ่สำหรับบันทึก เช่น 20-30 INTคอลัมน์ มันจะดีกว่าหรือไม่ที่จะเก็บทั้งชุดไว้ในตารางเดียวเนื่องจากทั้งหมดนั้นเป็นของระเบียนหรือสร้างตารางอื่นที่เชื่อมโยงกับความสัมพันธ์แบบหนึ่งต่อหนึ่ง ข้อได้เปรียบของอดีตคือการหลีกเลี่ยงJOINและเข้าถึงข้อมูลสถิติทั้งหมดสำหรับบันทึกที่เกี่ยวข้องได้อย่างรวดเร็ว ข้อได้เปรียบของหลังคือการทำให้คอลัมน์เป็นระเบียบ คอลัมน์แรกนั้นเป็นแบบอ่านอย่างละเอียดและแบบที่สองเป็นแบบเขียนมาก แน่นอนฉันคิดว่ามันไม่มีผลกระทบอย่างมีนัยสำคัญต่อประสิทธิภาพเนื่องจากฉันใช้ InnoDB กับการบล็อกระดับแถว โดยทั่วไปฉันต้องการทราบว่าเป็นประโยชน์หรือไม่ในการแยกชุดข้อมูลที่แตกต่างกันสำหรับบันทึกเดียว?


5
ประสิทธิภาพการทำงานที่โหดร้ายเข้าร่วมตาราง INSERTED และ DELETED ในทริกเกอร์
ฉันได้รับทริกเกอร์ UPDATE ในตารางที่เฝ้าดูคอลัมน์ที่เฉพาะเจาะจงเปลี่ยนจากค่าหนึ่งไปเป็นค่าอื่น ๆ เมื่อสิ่งนี้เกิดขึ้นมันจะอัพเดทข้อมูลที่เกี่ยวข้องในตารางอื่นผ่านคำสั่ง UPDATE เดียว สิ่งแรกที่ทริกเกอร์ทำการตรวจสอบเพื่อดูว่าแถวที่อัพเดตมีค่าของคอลัมน์นี้เปลี่ยนจากค่าที่เป็นปัญหาหรือไม่ มันจะรวมเข้ากับ INSERTED เพื่อลบและเปรียบเทียบค่าในคอลัมน์นั้น หากไม่มีสิ่งใดที่มีคุณสมบัติมันจะออกไปก่อนกำหนดดังนั้นคำสั่ง UPDATE จะไม่ทำงาน IF NOT EXISTS ( SELECT TOP 1 i.CUSTNMBR FROM INSERTED i INNER JOIN DELETED d ON i.CUSTNMBR = d.CUSTNMBR WHERE d.CUSTCLAS = 'Misc' AND i.CUSTCLAS != 'Misc' ) RETURN ในกรณีนี้ CUSTNMBR เป็นคีย์หลักของตารางต้นแบบ หากฉันอัปเดตจำนวนมากในตารางนี้ (พูด, 5,000+ แถว) …

1
Postgresql ดำเนินการ "ปิดอย่างรวดเร็ว" ด้วยตัวเอง ทำไม? มันสามารถทำเช่นนั้นได้อย่างไร?
ฉันได้อ่านแล้วและอ่านคู่มือมากที่สุดก่อนที่จะโพสต์ที่นี่ ข้อมูลรุ่น: Postgres8.4 บน Ubuntu10.x ฉันมีแล็ปท็อปส่วนตัวที่ฉันเปิดใช้เซิร์ฟเวอร์ postgres และสคริปต์ Java ที่ใช้ JDBC ใช้งานได้ 1600 ~ นาที (ซึ่งฉันเคยใช้งานมาหลายสัปดาห์แล้ว) ก่อนที่จะบอกว่าผู้ดูแลระบบรีสตาร์ทเซิร์ฟเวอร์ นี่คือสิ่งที่ฉันพบในบันทึก pgsql: Feb 29 07:46:55 krufe-laptop postgres[3578]: [2-1] 2012-02-29 07:46:55 EST LOG: incomplete startup packet Feb 29 07:46:56 krufe-laptop postgres[1113]: [2-1] 2012-02-29 07:46:56 EST LOG: received fast shutdown request Feb 29 07:46:56 krufe-laptop …
12 postgresql 

4
รับ id ของงานหรือชื่องานจากภายในการดำเนินงาน
ฉันมีฐานข้อมูลกลางที่ฉันเขียนผลลัพธ์งานบนเซิร์ฟเวอร์ทั้งหมดของฉันกลับไป ฉันส่งพารามิเตอร์ 3 ตัวผ่าน powershell ในงาน SQL กลับไปที่ sp บนเซิร์ฟเวอร์กลางที่ตรวจสอบว่างานควรจะทำงานในเวลานั้น ฯลฯ ข้อมูลจะถูกเปิดเผยผ่าน SSRS เพื่อให้เราเห็นงานล้มเหลว / งานที่ต้องทำงานนาน / & งานที่ไม่ได้ทำงาน แต่ควรมี (หรือถ้ามีคนยุ่งกับตาราง) ในการทำเช่นนี้ฉันมี 2 ขั้นตอนงานในแต่ละงานบนเซิร์ฟเวอร์ทุกเครื่องและฉันต้องการลดสคริปต์ลงเหลือเพียง 1 ขั้นตอนในแต่ละงาน .. อาจเป็นไปได้ที่จะโทรหาจากเครือข่ายที่ใช้ร่วมกัน .. แต่ปัญหาของฉันคือหนึ่งในสามพารามิเตอร์ที่ฉันผ่าน ฉันต้องการรับ jobid ที่กำลังเรียกใช้หรือชื่องานจากภายในงานที่กำลังดำเนินการดังนั้นฉันไม่ต้อง hardcode พารามิเตอร์ name 3 พารามิเตอร์ที่ฉันผ่านคือ jobid สถานะ (สำเร็จ / ล้มเหลว), errormsg สคริปต์ powershell ที่ฉันเขียนนั้นค่อนข้างตรงไปตรงมา เรียกใช้-sqlcmd -ServerInstance "MYRemoteSYSTEM" …

3
ทำไมฉันไม่ควรมีตารางหนึ่งตารางสำหรับความสัมพันธ์หลาย ๆ
สมมติว่าฉันมีความสัมพันธ์หลายอย่างในฐานข้อมูลของฉันเช่นร้านค้าพนักงานและการขายและฉันต้องการเชื่อมต่อคู่กับความสัมพันธ์แบบไบนารีที่เรียบง่าย ส่วนตัวฉันจะสร้างตารางชื่อ Employee_Store และ Employee_Sale ด้วยคีย์ธรรมชาติที่ประกอบด้วยคีย์ต่างประเทศ ตอนนี้เพื่อนร่วมงานของฉันยืนยันในการสร้างหนึ่งตารางสำหรับความสัมพันธ์ที่หลากหลาย สำหรับตัวอย่างข้างต้นอาจมีตารางชื่อ EmployeeLinks: EmployeeLinks( IdLink int PK, IdEmployee int FK null, IdStore int FK null, IdSale int FK null, LinkType int not null ) โปรดช่วยฉันด้วยเหตุผลที่ดีว่าทำไมจึงไม่ใช่ความคิดที่ดี ฉันมีข้อโต้แย้งของฉันเอง แต่ฉันต้องการให้พวกเขาเป็นส่วนตัวและรับฟังความคิดเห็นที่ไม่ลำเอียงของคุณ แก้ไข: เริ่มแรกตารางข้างต้นจะไม่มีคีย์หลัก (!) เนื่องจากคีย์ต่างประเทศอนุญาตให้ null คีย์ตัวแทนเป็นตัวเลือกเดียว

4
แยกฟิลด์จาก RESTORE HEADERONLY
ฉันพยายามใช้ 'เรียกคืน HEADERONLY ' เพื่อรับวันที่ที่ฉันกำลังจะทำการสำรองข้อมูล คำสั่ง: RESTORE HEADERONLY FROM DISK = '<path to .bak file>' ทำงานได้ดีใน Query Analyzer และให้ชุดผลลัพธ์กับคอลัมน์ 50 คอลัมน์ ปัญหาคือการเข้าถึงนี้จากรหัส ฉันสามารถเอามันเข้าไปในตารางชั่วคราวได้โดยการประกาศทุก ๆ คอลัมน์ของคอลัมน์ 50: ish แทรกเข้าไปด้วยexecและรับค่าที่ฉันต้องการจากตรงนั้น ปัญหาคือฉันต้องการหลีกเลี่ยงการประกาศ resultset ทั้งหมดเป็นตารางชั่วคราวเนื่องจากดูเหมือนว่าจะเป็นวิธีการแก้ไขที่เปราะบางหากพวกเขาเพิ่มคอลัมน์ลงในรุ่นอนาคต มีวิธีใดที่จะเอาคอลัมน์เดียวออกจากชุดผลลัพธ์นี้โดยไม่ต้องประกาศคอลัมน์ทั้งหมดหรือไม่

5
MySQL - วิธีที่เร็วที่สุดในการเปลี่ยนตารางสำหรับ InnoDB
ฉันมีตาราง InnoDB ที่ฉันต้องการแก้ไข ตารางมีแถว ~ 80M และออกจากไม่กี่ดัชนี ฉันต้องการเปลี่ยนชื่อของคอลัมน์ใดคอลัมน์หนึ่งและเพิ่มดัชนีอีกสองสามรายการ วิธีที่เร็วที่สุดที่จะทำคืออะไร (สมมติว่าฉันสามารถประสบแม้กระทั่งการหยุดทำงาน - เซิร์ฟเวอร์เป็นทาสที่ไม่ได้ใช้)? คำว่า "ธรรมดา" alter tableคือทางออกที่เร็วที่สุดหรือไม่? ในเวลานี้สิ่งที่ฉันสนใจคือความเร็ว :)

2
ฉันสามารถเปลี่ยนชื่อค่าในคอลัมน์ MySQL ENUM ในหนึ่งแบบสอบถามได้หรือไม่
ENUM('value_one','value_two')สมมติว่าฉันมีตารางฐานข้อมูลที่มี ENUM('First value','Second value')ฉันต้องการที่จะเปลี่ยนที่ไปยัง ฉันกำลังทำสิ่งดังต่อไปนี้: ALTER TABLE `table` MODIFY `column` ENUM('value_one','value_two','First value','Second value'); UPDATE `table` SET `column`='First Value' WHERE `column`='value_one'; UPDATE `table` SET `column`='Second Value' WHERE `column`='value_two'; ALTER TABLE `table` MODIFY `column` ENUM('First value','Second value'); มีวิธีที่มีประสิทธิภาพมากขึ้นในการทำเช่นนี้ EG มีวิธีในการทำสิ่งนี้ให้สำเร็จด้วย คำสั่งเดียว ALTER TABLEหรือไม่?

5
จากชุดของค่าฉันจะค้นหาค่าที่ไม่ได้เก็บไว้ในคอลัมน์ของตารางได้อย่างไร
ฉันมีตารางที่จะเก็บจำนวนเต็มนับแสน desc id_key_table; +----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+-------+ | id_key | int(16) | NO | PRI | NULL | | +----------------+--------------+------+-----+---------+-------+ จากโปรแกรมฉันมีจำนวนเต็มชุดใหญ่ ฉันต้องการดูว่าเลขจำนวนเต็มใดที่ไม่อยู่ในคอลัมน์ id_key ด้านบน จนถึงตอนนี้ฉันได้วิธีต่อไปนี้แล้ว: 1) วนซ้ำแต่ละจำนวนเต็มและทำ a: select count(*) count from id_key_table where id_key = :id_key เมื่อการนับเป็น 0 …
12 mysql 

5
มีระบบจัดการฐานข้อมูลแบบโอเพ่นซอร์สหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการในวันที่ 11 เดือนที่ผ่านมา ฉันกำลังมองหาระบบการจัดการฐานข้อมูลแบบลำดับชั้นและมีเพียงระบบเดียวที่ฉันเจอคือ IBM's ims.ArthEdge มีระบบโอเพ่นซอร์สที่สามารถใช้งานได้หรือไม่

3
ประสิทธิภาพการทำงานยอดเยี่ยมใช้ CAST ใน T-SQL
เรามีเครื่องกำเนิดไฟฟ้า SQL ที่ส่งเสียง SQL งบเงื่อนไขทั่วไปสำหรับเขตข้อมูลที่ระบุไว้ (ซึ่งเพื่อประโยชน์ของการอภิปราย: เราจะติดป้ายว่าเป็นmyField) ถ้าmyFieldเป็นประเภทที่เราสามารถทำได้เปรียบเทียบข้อมูลดังกล่าวกับสายเช่นเพื่อให้เป็น:NVARCHARmyField = 'foo' NTEXTแต่นี้ไม่ทำงานสำหรับเขตข้อมูลประเภท CAST(myField as NVARCHAR(MAX)) = 'foo'ดังนั้นเราจึงต้องทำเปรียบเทียบกับหล่อ: ประสงค์ในการทำงานความจริงเรื่องนี้ถ้าmyFieldเป็นประเภทหรือNVARCHARNTEXT อะไรคือผลงานยอดเยี่ยมของการทำนักแสดงดังกล่าวในสนามที่มีประเภทอยู่แล้วNVARCHAR ? ฉันหวังว่า SQL Server เป็นพอสมาร์ทที่จะรับรู้แบบไดนามิกที่myFieldมีอยู่แล้วจากประเภทNVARCHAR(ประสิทธิภาพการเปลี่ยนCASTเป็นไม่มี-op)

3
วิธีที่เร็วที่สุดในการนับจำนวนช่วงวันที่ครอบคลุมแต่ละวันจากซีรี่ส์
ฉันมีตาราง (ใน PostgreSQL 9.4) ที่มีลักษณะเช่นนี้: CREATE TABLE dates_ranges (kind int, start_date date, end_date date); INSERT INTO dates_ranges VALUES (1, '2018-01-01', '2018-01-31'), (1, '2018-01-01', '2018-01-05'), (1, '2018-01-03', '2018-01-06'), (2, '2018-01-01', '2018-01-01'), (2, '2018-01-01', '2018-01-02'), (3, '2018-01-02', '2018-01-08'), (3, '2018-01-05', '2018-01-10'); ตอนนี้ฉันต้องการคำนวณสำหรับวันที่ที่กำหนดและสำหรับทุกประเภทว่ามีกี่แถวจากdates_rangesแต่ละวันที่ตก อาจตัดศูนย์ได้ ผลลัพธ์ที่ต้องการ: +-------+------------+----+ | kind | as_of_date | n | …

4
วิธีรับกลุ่มที่การนับเป็นศูนย์ได้อย่างไร
ฉันจะพยายามสร้างกราฟจากข้อมูลจากฐานข้อมูลเซิร์ฟเวอร์ SQL ของฉัน ฉันจะมีถนนทุกเส้นที่มีจำนวนผู้ใช้ที่อาศัยอยู่บนถนนเส้นนี้แม้จำนวนนั้นจะเป็นศูนย์ สำหรับสิ่งนี้ฉันได้ลองใช้แบบสอบถามนี้: Create table Streets( ID int IDENTITY primary key, Name varchar(100) ); create table users( ID int IDENTITY primary key, Username varchar(100), StreetID int references Streets(id) ); insert into streets values ('1st street'), ('2nd street'), ('3rd street'), ('4th street'), ('5th street'); insert into users values ('Pol', …

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