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

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

7
กำลังจัดเก็บที่อยู่ IP
ฉันต้องเก็บที่อยู่ IP ของผู้ใช้ที่ลงทะเบียนทั้งหมดในฐานข้อมูล ฉันสงสัยว่าฉันควรประกาศตัวละครในคอลัมน์นี้กี่ตัว? ฉันควรสนับสนุน IPv6 ด้วยหรือไม่ ถ้าเป็นเช่นนั้นความยาวสูงสุดของที่อยู่ IP คืออะไร?

2
SQL Server - อนุญาตให้สิทธิ์กับทั้ง schema กับวัตถุ?
ฉันเป็นมิตรกับโลกของการจัดการสิทธิ์ในฐานข้อมูลใน SQL Sever ขอยกตัวอย่างง่ายๆ สมมติว่าบัญชี 'admin' เป็นเจ้าของ schemas A, B และ C มีบัญชี 'minion' อีกบัญชีหนึ่งที่คุณต้องการให้มีสิทธิ์อย่างเต็มที่ (อัปเดต / ลบ / แทรก / เลือก / แก้ไข) บนวัตถุใด ๆ (ตาราง / มุมมอง) ที่สร้างขึ้นภายใต้สคีมา A, B และ C เป็นไปได้ไหม หรือคุณต้องใช้คำสั่งให้สิทธิ์ทุกครั้งที่คุณเพิ่มตาราง / มุมมองภายใต้สคีมาเหล่านี้หรือไม่? (ดูเหมือนฉันจะโง่ไปหน่อย)

2
วิธีแทรกหรืออัปเดตโดยใช้ข้อความค้นหาเดียว
ฉันมีตารางทดสอบที่มีคอลัมน์ id ซึ่งเป็นคีย์หลักและเพิ่มขึ้นอัตโนมัติและชื่อ ฉันต้องการที่จะแทรกบันทึกใหม่ถ้า annd เฉพาะในกรณีที่ไม่มีบันทึกตัวอย่างเช่น อินพุตคือ id = 30122 และ name = john หากมีการบันทึกที่มี id 30122 ฉันได้อัปเดตคอลัมน์ชื่อเป็น john หากไม่มีการบันทึกฉันจะใส่บันทึกใหม่ ฉันสามารถทำได้โดยใช้ 2 แบบสอบถามเช่น select * from test where id=30122 หากมีบางบันทึกฉันสามารถใช้งานได้ update test set name='john' where id=3012 หรือถ้ามันไม่มีบันทึกฉันก็สามารถใช้งานได้ insert into test(name) values('john') แต่ฉันต้องการใช้ข้อความค้นหาเดียว? ใครสามารถบอกได้ถ้าเป็นไปได้?

4
บันทึก / ส่งออกการตั้งค่าการกำหนดค่ารายการเซิร์ฟเวอร์ PGAdmin
ฉันมีการเชื่อมต่อที่ตั้งค่าไว้มากมายในกลุ่มเซิร์ฟเวอร์มีวิธีที่ฉันสามารถบันทึกสิ่งนี้ได้หรือไม่? ไม่เพียงบันทึกรหัสผ่าน แต่เป็นการตั้งค่ากลุ่มเซิร์ฟเวอร์

5
ประโยชน์ของการใช้ backtick (`) ในแบบสอบถาม MySQL?
ใน MySQL เราสามารถสร้างคิวรีที่มีหรือไม่มี`สัญลักษณ์backtick ( ) ตัวอย่าง: SELECT * FROM TEST; SELECT * FROM `TEST`; ทั้งสองทำงานได้ดีใน mysql-console มีความแตกต่างทางเทคนิคหรือไม่? มีประโยชน์ในการใช้ ( `) มากกว่าการค้นหาอย่างง่ายหรือไม่
25 mysql  select 

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

1
(NOLOCK) กับ NOLOCK
ฉันกำลังตรวจสอบการบล็อกบางอย่างเมื่อฉันเห็นข้อความค้นหาที่มีลักษณะดังนี้: SELECT SomeField FROM SomeTable NOLOCK ฉันเห็นNOLOCKและอยากรู้ว่ามันจะบล็อกข้อความค้นหาอื่น ๆ ได้อย่างไรในกรณีDELETEนี้ ฉันลองดูที่ล็อคโดยใช้sp_lockและนี่คือสิ่งที่ฉันเห็น: DB S GRANT TAB IS GRANT PAG S GRANT ตอนนี้ความเข้าใจของฉันคือที่NOLOCKควรจะใช้ล็อค Schema-Stability เท่านั้นทำไมมันจึงคว้าล็อค IS? ความอยากรู้ของฉันป่องๆ ฉันดู BOL และเห็นว่ามีสองวิธีในการใช้WITH (NOLOCK)และเลิกใช้แล้ว(NOLOCK)ดังนั้นฉันจึงตัดสินใจลองใช้ ฉันเรียกใช้แบบสอบถามต่อไปนี้ตามด้วยการเรียกใช้sp_lock: SELECT SomeField FROM SomeTable WITH (NOLOCK) DB S GRANT TAB Sch-S GRANT SELECT SomeField FROM SomeTable (NOLOCK) DB S GRANT TAB …

1
ฟังก์ชันการซ้อนฟังก์ชันสเกลาร์อ้างอิงตนเองด้วยตนเองเกินเมื่อเพิ่มการเลือก
วัตถุประสงค์ เมื่อพยายามสร้างตัวอย่างทดสอบของฟังก์ชันการอ้างอิงตนเองรุ่นหนึ่งล้มเหลวในขณะที่อีกรุ่นหนึ่งประสบความสำเร็จ ความแตกต่างเพียงอย่างเดียวคือการเพิ่มSELECTให้กับส่วนของฟังก์ชันทำให้แผนการดำเนินการแตกต่างกันสำหรับทั้งสอง ฟังก์ชั่นที่ใช้งานได้ CREATE FUNCTION dbo.test5(@i int) RETURNS INT AS BEGIN RETURN( SELECT TOP 1 CASE WHEN @i = 1 THEN 1 WHEN @i = 2 THEN 2 WHEN @i = 3 THEN dbo.test5(1) + dbo.test5(2) END ) END; กำลังเรียกใช้ฟังก์ชัน SELECT dbo.test5(3); ผลตอบแทน (No column name) 3 ฟังก์ชั่นที่ไม่ทำงาน CREATE …

3
SQL Server ล้างแคชแผนและสถิติการดำเนินการเป็นระยะ
หลังจากอัปเกรด SQL Server 2014 ถึง 2016 เซิร์ฟเวอร์จะทำการรีเซ็ตแผนการดำเนินการและdm*มุมมองแคช(เช่นdm_exec_query_stats) เป็นต้นทุก ๆ สองสามชั่วโมง ราวกับว่ามีคนดำเนินการDBCC FREEPROCCACHEและDBCC DROPCLEANBUFFERSด้วยตนเอง (ยกเว้นไม่มีใครทำมันจะเกิดขึ้นโดยอัตโนมัติ) ฐานข้อมูลเดียวกันทำงานได้ดีบน SQL Server 2014 และ Windows Server 2012 ทุกอย่างดำเนินไปทางใต้หลังจากย้ายไปยัง SQL Server 2016 (และ Windows Server 2016) สิ่งที่ผมตรวจสอบ: ฐานข้อมูลไม่ได้มี "รถยนต์ใกล้ธง" เซิร์ฟเวอร์ SQL ถูกad hoc optimizedตั้งค่าเป็นtrue(ฉันคิดว่ามันจะช่วยไม่ได้) "ที่เก็บแบบสอบถาม" คือ "ปิด" เซิร์ฟเวอร์มีหน่วยความจำ 16 GB ไม่มีประโยชน์ใน "บันทึกของเซิร์ฟเวอร์ SQL" เพียงแค่ข้อความสำรองรายสัปดาห์ ... ฉันตรวจสอบบทความนี้ด้วยhttps://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-set-options …

2
จำนวนการเชื่อมต่อผู้ใช้สูงสุด
ในรุ่นมาตรฐาน SQL Server 2012 ฉันรู้ว่าจำนวนการเชื่อมต่อผู้ใช้สูงสุดคือ 32,767 ฉันควรทำอย่างไรในฐานะ DBA ถ้าฉันมุ่งหน้าไปยังหมายเลขนี้ ขณะนี้มีการเชื่อมต่อกับผู้ใช้ 30,000 รายและคาดว่าจำนวนนี้จะเพิ่มขึ้น

7
ปัญหาใดที่แก้ไขได้โดยแยกที่อยู่เป็นคอลัมน์แต่ละคอลัมน์
เรามีทีมงานที่ออกแบบตารางและความสัมพันธ์สำหรับนักพัฒนาซอฟต์แวร์ ในองค์กรของเราพวกเขาค่อนข้างเข้มงวดเกี่ยวกับการบังคับใช้มาตรฐาน 3NF ซึ่งโดยความจริงแล้วฉันเห็นด้วยกับขนาดองค์กรของเราและความต้องการหรือลูกค้าของเราเปลี่ยนแปลงไปตามกาลเวลาอย่างไร มีเพียงส่วนเดียวที่ฉันไม่ชัดเจนเกี่ยวกับเหตุผลที่อยู่เบื้องหลังการตัดสินใจออกแบบ: ที่อยู่ แม้ว่าสิ่งนี้จะเน้นที่ที่อยู่ในสหรัฐอเมริกาเป็นส่วนใหญ่ แต่ฉันคิดว่าสิ่งนี้สามารถใช้ได้กับทุกประเทศที่ทำสิ่งนี้ ที่อยู่แต่ละส่วนจะได้รับคอลัมน์ของตนเองในตารางที่อยู่ ตัวอย่างเช่นใช้ที่อยู่ gnarly US นี้: Attn: Jane Doe 485 1/2 N Smith St SW, APT 300B Chicago, IL 11111-2222 มันจะถูกแยกย่อยในฐานข้อมูลดังนี้: ถนนหมายเลข: 485 เศษถนน: 1/2 ทิศทางก่อนถนน: N (เหนือ) ชื่อถนน: Smith ประเภทถนน: ST (ถนน) ทิศทางหลังถนน: SW (ตะวันตกเฉียงใต้) เมือง: ชิคาโก รัฐ: IL (อิลลินอยส์) รหัสไปรษณีย์: 11111 …

2
Cardinality Estimate สำหรับผู้ประกอบการ LIKE (ตัวแปรท้องถิ่น)
ฉันรู้สึกว่าเมื่อใช้ตัวLIKEดำเนินการในการปรับให้เหมาะสมสำหรับสถานการณ์ที่ไม่รู้จักทั้งมรดกและ CE ใหม่ใช้ประมาณการ 9% (สมมติว่ามีสถิติที่เกี่ยวข้องพร้อมใช้งานและเครื่องมือเพิ่มประสิทธิภาพการสืบค้นไม่จำเป็นต้องคาดเดาการเลือก) เมื่อดำเนินการค้นหาด้านล่างกับฐานข้อมูลเครดิตฉันได้รับการประมาณการที่แตกต่างกันภายใต้ CE ที่แตกต่างกัน ภายใต้ CE ใหม่ฉันได้รับการประมาณ 900 แถวซึ่งฉันคาดหวังภายใต้ CE ดั้งเดิมฉันได้รับการประมาณ 241.416 และฉันไม่สามารถทราบได้ว่าการประเมินนี้มาจากอะไร มีใครสามารถที่จะหลั่งน้ำตาแสงใด ๆ ? -- New CE (Estimate = 900) DECLARE @LastName VARCHAR(15) = 'BA%' SELECT * FROM [Credit].[dbo].[member] WHERE [lastname] LIKE @LastName; -- Forcing Legacy CE (Estimate = 241.416) DECLARE @LastName VARCHAR(15) = …

2
ปรับปรุงประสิทธิภาพของ COUNT / GROUP-BY ในตาราง PostgresSQL ขนาดใหญ่?
ฉันใช้ PostgresSQL 9.2 และมีความสัมพันธ์ 12 คอลัมน์มีประมาณ 6,700,000 แถว มันมีโหนดในพื้นที่ 3 มิติแต่ละคนอ้างอิงผู้ใช้ (ผู้สร้างมัน) ในการสอบถามผู้ใช้รายใดที่สร้างจำนวนโหนดที่ฉันทำต่อไปนี้ (เพิ่มexplain analyzeสำหรับข้อมูลเพิ่มเติม): EXPLAIN ANALYZE SELECT user_id, count(user_id) FROM treenode WHERE project_id=1 GROUP BY user_id; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- HashAggregate (cost=253668.70..253669.07 rows=37 width=8) (actual time=1747.620..1747.623 rows=38 loops=1) -> Seq Scan on treenode (cost=0.00..220278.79 rows=6677983 width=8) (actual time=0.019..886.803 rows=6677983 loops=1) …

4
เหตุใดบันทึกการทำธุรกรรมจึงยังคงเติบโตในโหมดการกู้คืนอย่างง่ายพร้อมการสำรองข้อมูลทุกคืน
ก่อนที่จะทำเครื่องหมายว่าซ้ำกันทันทีฉันได้อ่านของ Mike Walsh เหตุใดทรานแซคชันทรานแซกชันเติบโตหรือหมดพื้นที่ แต่ฉันไม่คิดว่ามันจะให้คำตอบกับสถานการณ์ของฉัน ฉันดูคำถามที่คล้ายกันหลายสิบคำถาม แต่คำถามที่เกี่ยวข้องส่วนใหญ่เพิ่งพูดว่า "ซ้ำ" และชี้ไปที่คำถามของไมค์ รายละเอียด: ฉันมีฐานข้อมูลจำนวน ~ 500MB ใน SQL Server 2008 R2 ทั้งหมดในโหมดการกู้คืนที่เรียบง่าย (ไม่ใช่ตัวเลือกของฉัน) สำรองข้อมูลเต็มรูปแบบทุกคืนพร้อมแฟ้มข้อมูล ~ 200MB และไฟล์บันทึก ~ 300MB บันทึกจะไม่โตขึ้นเป็น 300MB ทันที แต่ค่อนข้างช้าในช่วงสองสามเดือน ไม่มีธุรกรรมใด ๆ เปิดอยู่อย่างน้อยตาม sp_who2 และการตรวจสอบกิจกรรม ถ้าฉันคลิกขวาที่ฐานข้อมูลและเลือกคุณสมบัติมันบอกฉันว่ามี ~ 50MB ฟรี โดยเฉพาะอย่างยิ่งหลังจากการสำรองข้อมูลไฟล์บันทึกทั้งหมดไม่ควรว่างหรือไม่ ในโหมด SIMPLE บันทึกไม่ควรฟรีตราบใดที่ไม่มีธุรกรรมเปิดอยู่ log_reuse_wait_descจากsys.databasesว่าพูดว่า "ไม่มีอะไร" ซึ่งขึ้นอยู่กับคำถามและคำตอบที่อ้างถึงข้างต้นบอกว่ามันไม่ควรรออะไรที่จะนำมาใช้ซ้ำพื้นที่ ถ้าฉันทำ 'DBCC SHRINKFILE' ไฟล์บันทึกจะลดลงเหลือ …

3
ข้อ จำกัด ในการบังคับใช้“ อย่างน้อยหนึ่ง” หรือ“ หนึ่งอย่าง” ในฐานข้อมูล
สมมติว่าเรามีผู้ใช้และผู้ใช้แต่ละคนสามารถมีที่อยู่อีเมลได้หลายที่อยู่ CREATE TABLE emails ( user_id integer, email_address text, is_active boolean ) แถวตัวอย่างบางส่วน user_id | email_address | is_active 1 | foo@bar.com | t 1 | baz@bar.com | f 1 | bar@foo.com | f 2 | ccc@ddd.com | t ฉันต้องการบังคับใช้ข้อ จำกัด ที่ผู้ใช้ทุกคนมีที่อยู่หนึ่งที่แน่นอน ฉันจะทำสิ่งนี้ใน Postgres ได้อย่างไร ฉันสามารถทำสิ่งนี้: CREATE UNIQUE INDEX "user_email" ON …

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