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

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

6
กำหนดวันศุกร์ที่ 3 ของทุกเดือน
ฉันต้องกำหนดวันที่ซึ่งเป็น "วันศุกร์ที่ 3 ของแต่ละเดือน" สำหรับช่วงวันที่ "1.1.1996 - 30.8.2014" ใน SQL Server ฉันคาดหวังว่าฉันควรใช้การรวมกันของDENSE_RANK()และPARTITION BY()เพื่อตั้ง "อันดับ = 3" อย่างไรก็ตามฉันใหม่กับ SQL และไม่สามารถค้นหารหัสที่ถูกต้องได้

4
อ้างสิทธิ์พื้นที่ดิสก์หลังจากลบเขตข้อมูลตาราง
ฉันใช้ sql 2008 r2 และ db นั้นทำงานได้ดีและรวดเร็วในช่วง 3 ปีที่ผ่านมาจนถึงประมาณ 3 เดือนที่ผ่านมาเราได้เพิ่มเขตข้อมูล ntext ในตารางที่ใช้งานและใช้งานมาก ตอนนี้เรากำลังเริ่มที่จะออกจากพื้นที่เซิร์ฟเวอร์เนื่องจากขนาดที่ใหญ่ขึ้นของตารางนี้ ฉันอ่านว่าการลดขนาดเราไม่ต้องการทำให้ดัชนีของฐานข้อมูลหลวมเพราะมันทำงานได้อย่างรวดเร็วเป็นเวลาหลายปีและเราไม่ต้องการที่จะได้รับการกระจายตัวของข้อมูล เราตัดสินใจลบฟิลด์นั้นและค่าทั้งหมด: มีวิธีลบฟิลด์ ntext และค่าทั้งหมดและพื้นที่ปล่อยโดยไม่ต้องลบการทำดัชนีโดยไม่ลดขนาดโดยไม่ลดขนาดประสิทธิภาพ db หรือไม่ ฉันกำลังแนบเอาต์พุตคิวรีขนาด db เพื่อแสดงการขยายขนาดของคุณใน 5 เดือนที่ผ่านมา

3
สร้างลำดับชั้นของหลายระดับโดยที่แต่ละโหนดมีจำนวนชายด์แบบสุ่ม
ฉันต้องการสร้างข้อมูลทดสอบที่เกี่ยวข้องกับลำดับชั้น ฉันสามารถทำให้ง่ายและทำสองสามCROSS JOINวินาที แต่นั่นจะให้โครงสร้างที่เหมือนกันโดยสมบูรณ์ / ไม่มีการเปลี่ยนแปลงใด ๆ นั่นไม่เพียง แต่ดูน่าเบื่อ แต่การขาดความผันแปรในข้อมูลการทดสอบบางครั้งก็เป็นตัวกำหนดปัญหาที่อาจพบได้ ดังนั้นฉันต้องการสร้างลำดับชั้นที่ไม่เหมือนกันซึ่งปฏิบัติตามกฎเหล่านี้: ลึก 3 ระดับ ระดับ 1 คือการสุ่ม 5 - 20 โหนด ระดับ 2 คือ 1 - 10 โหนดสุ่มต่อโหนดระดับ 1 แต่ละโหนด ระดับ 3 คือ 1 - 5 โหนดสุ่มต่อโหนดระดับ 2 แต่ละโหนด ทุกสาขาจะลึก 3 ระดับ ความสม่ำเสมอในเชิงลึกก็โอเค ณ จุดนี้ อาจมีการทับซ้อนกันในชื่อของโหนดลูกในระดับที่กำหนดใด ๆ (เช่นชื่อของโหนดลูกไม่จำเป็นต้องไม่ซ้ำกันในทุกโหนดในระดับเดียวกัน) คำว่า "สุ่ม" …

3
อัปเดตช้าในตารางขนาดใหญ่พร้อมแบบสอบถามย่อย
เมื่อSourceTableมีระเบียน> 15MM และBad_Phraseมีระเบียน> 3K แบบสอบถามต่อไปนี้จะใช้เวลาเกือบ 10 ชั่วโมงในการเรียกใช้บน SQL Server 2005 SP4 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) ในภาษาอังกฤษคำนี้คือการนับจำนวนของวลีที่แตกต่างกันการระบุไว้ใน Bad_Phrase ที่มี substring ของสนามNameในแล้ววางผลว่าในสนามSourceTableBad_Count ฉันต้องการคำแนะนำเกี่ยวกับวิธีทำให้แบบสอบถามนี้ทำงานได้เร็วขึ้นอย่างมาก

9
ทางเลือกของประโยคที่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Exchange Administrators Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว มีวิธีSELECTแถวเฉพาะกับข้อมูลบางอย่างในคอลัมน์โดยไม่ใช้WHEREหรือไม่? เช่นถ้าฉันมีสิ่งนี้: SELECT * FROM Users WHERE town = 'Townsville' มีวิธีการใช้WHEREประโยคในSELECTคำสั่งหรือไม่ สิ่งที่ต้องการ SELECT *, town('Townsville') FROM Users มันเป็นคำถามที่แปลกประหลาด แต่เป็นคำถามที่ฉันถูกถามจากคนรอบข้าง
16 sql-server 

2
การค้นหา Trigram ช้าลงมากเมื่อสตริงการค้นหายาวขึ้น
ในฐานข้อมูล Postgres 9.1 ฉันมีตารางที่table1มีแถว ~ 1.5M และคอลัมน์label(ชื่อที่เรียบง่ายเพื่อประโยชน์ของคำถามนี้) มีดัชนีการทำงานของ Trigram-on lower(unaccent(label)) ( unaccent()ถูกทำให้ไม่เปลี่ยนรูปเพื่ออนุญาตให้ใช้ในดัชนี) แบบสอบถามต่อไปนี้ค่อนข้างเร็ว: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword%'))); count ------- 1 (1 row) Time: 394,295 ms แต่แบบสอบถามต่อไปนี้ช้าลง: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword and some more%'))); count ------- 1 (1 row) Time: 1405,749 ms และการเพิ่มคำอื่น …

6
วิธีการแก้ไขข้อผิดพลาด“ บัญชีที่ระบุมีอยู่แล้ว” ระหว่างการติดตั้ง SQL Server 2008 R2
ฉันเพิ่งมีปัญหาขณะติดตั้ง Visual Studio 2012 และ SQL Server 2008 R2 บนเครื่องพัฒนาใหม่ ลำดับการติดตั้งของฉันคือ Visual Studio 2012 จากนั้นติดตั้ง SQL Server 2008 R2 เกิดข้อผิดพลาดระหว่างการติดตั้ง SQL Server ตรงกลาง: บัญชีที่ระบุมีอยู่แล้ว ฉันใช้เวลาทั้งวันพยายามแก้ไขปัญหานี้

2
Latin1_General_BIN ส่งผลกระทบต่อประสิทธิภาพเมื่อเปลี่ยนการเปรียบเทียบค่าเริ่มต้นของฐานข้อมูล
ฉันได้ตั้งค่าการเปรียบเทียบฐานข้อมูลเป็นLatin1_General_BINเพื่อทำการเปรียบเทียบสตริงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ สิ่งนี้จะส่งผลกระทบต่อประสิทธิภาพหรือไม่ มันจะมีผลกระทบกับการดำเนินงาน DML หรือ DDL ในฐานข้อมูลหรือไม่ ฐานข้อมูลมีอยู่แล้วในตาราง

2
ทำไมการอ้างถึงตัวแปรในลูปที่ซ้อนกันของกำลังภาคบังคับ
ฉันเจอปัญหานี้เมื่อเร็ว ๆ นี้และไม่พบการสนทนาออนไลน์ แบบสอบถามด้านล่าง DECLARE @S VARCHAR(1) = ''; WITH T AS (SELECT name + @S AS name2, * FROM master..spt_values) SELECT * FROM T T1 INNER JOIN T T2 ON T1.name2 = T2.name2; รับแผนลูปซ้อนกันเสมอ การพยายามบังคับให้เกิดปัญหากับINNER HASH JOINหรือINNER MERGE JOINคำแนะนำจะทำให้เกิดข้อผิดพลาดดังต่อไปนี้ ตัวประมวลผลแบบสอบถามไม่สามารถสร้างแผนแบบสอบถามได้เนื่องจากคำแนะนำที่กำหนดไว้ในแบบสอบถามนี้ ส่งแบบสอบถามโดยไม่ระบุคำแนะนำใด ๆ และไม่ต้องใช้ SET FORCEPLAN ฉันพบวิธีแก้ปัญหาที่อนุญาตให้ใช้การรวมแฮชหรือการผสาน - การรวมตัวแปรในการรวม แผนที่สร้างขึ้นนั้นมีต้นทุนที่ต่ำกว่าอย่างมาก …

1
ไม่สามารถเชื่อมต่อกับฐานข้อมูล postgresql ระยะไกล
ฉันพยายามเชื่อมต่อกับฐานข้อมูล psql ระยะไกล ก่อนที่ฉันจะเพิ่มรายการ pg_hba.conf ด้วยที่อยู่ IP ของลูกค้าฉันได้รับข้อความแสดงข้อผิดพลาด: xdev@xdevbox:~$ psql -U postgres testdb -h 10.1.1.47 psql: FATAL: no pg_hba.conf entry for host "10.201.50.71", user "postgres", database "testdb", SSL off ฉันเพิ่ม IP ของลูกค้าด้วยการตั้งค่าความน่าเชื่อถือ ฉันเปลี่ยนที่อยู่ฟังใน postgres.conf บนเซิร์ฟเวอร์เพื่อฟัง "*" จากนั้นฉันรีสตาร์ทเซิร์ฟเวอร์ฐานข้อมูลโดยใช้คำสั่ง /etc/init.d/postgresql restart ตอนนี้เมื่อฉันพยายามเชื่อมต่อฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: psql: could not connect to server: Connection refused Is the …

1
sys.sql_logins.is_policy_checked หมายความว่ามีการตรวจสอบนโยบายหรือไม่
เมื่อฉันมองในผมเห็นคอลัมน์ที่เรียกว่าsys.sql_logins is_policy_checkedฉันสามารถเชื่อถือได้ว่านโยบายรหัสผ่านของฉันได้รับการตรวจสอบสำหรับการเข้าสู่ระบบทั้งหมดที่ค่าคอลัมน์นี้คือ1อะไร?

2
การแสดงข้อมูลเหตุการณ์ที่ขยายของเซิร์ฟเวอร์ SQL
เมื่อเร็ว ๆ นี้ฉันได้สำรวจโดยใช้ Extended Events ใน SQL Server เพื่อช่วยฉันเปรียบเทียบและเพิ่มประสิทธิภาพการค้นหาต่างๆ จนถึงตอนนี้เพื่อดูข้อมูลเหตุการณ์ที่ฉันใช้คุณลักษณะ "ดูข้อมูลสด" ใน SSMS ปัญหาที่ฉันพบคือปรากฏว่าฟีเจอร์ Live Events ใช้บัฟเฟอร์ภายในซึ่งหมายความว่าบางครั้งฉันต้องเรียกใช้แบบสอบถามหลายครั้งเพื่อรับข้อมูลเพื่อแสดงในหน้าต่าง ฉันจึงมีคำถามสองส่วนที่จะถาม: มีวิธีใดที่จะหลีกเลี่ยงความล่าช้านี้ในการรับเหตุการณ์ที่จะแสดงในฟีดสดหรือไม่? (ฉันกำลังทำสิ่งนี้ในฐานข้อมูลท้องถิ่นดังนั้นประสิทธิภาพจึงไม่เป็นปัญหา) ฟีดข้อมูลสดเป็นวิธีที่ดีที่สุดในการแสดงภาพข้อมูลกิจกรรมเพิ่มเติมหรือไม่ มีเครื่องมืออื่นใน SSMS หรือไม่ที่ปรับให้เข้ากับกรณีการใช้งานของฉันได้ดีขึ้น? UPDATE ตามที่ร้องขอนี่คือเซสชัน: CREATE EVENT SESSION [Simple Query Benchmarking] ON SERVER ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1) ACTION(sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text) WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[greater_than_uint64]([duration],(1000)))) ADD TARGET package0.ring_buffer WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=1 SECONDS,MAX_EVENT_SIZE=0 …

3
ไม่สามารถเริ่มเซิร์ฟเวอร์ MySQL เนื่องจากการอนุญาตไฟล์ผิด
ฉันพยายามเริ่มเซิร์ฟเวอร์และแก้ไขผู้ใช้รูทด้วย $ mysql -u root mysql $mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root'; $mysql> FLUSH PRIVILEGES; แต่เซิร์ฟเวอร์ไม่สามารถเริ่มต้น: $ mysqld --skip-grant-tables 2014-10-21 07:18:24 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2014-10-21 07:18:24 1967 [Warning] Can't create test file /usr/local/mysql-5.6.21-osx10.8-x86_64/data/x4430.lower-test …

2
ผลลัพธ์ที่ไม่คาดคิดพร้อมตัวเลขสุ่มและประเภทการเข้าร่วม
ฉันมีสคริปต์ง่าย ๆ ที่ได้รับตัวเลขสุ่มสี่ตัว (1 ถึง 4) จากนั้นก็กลับมารวมกันเพื่อรับหมายเลข database_id ที่ตรงกัน เมื่อฉันรันสคริปต์ด้วย LEFT JOIN ฉันจะได้สี่แถวกลับมาทุกครั้ง (ผลลัพธ์ที่คาดหวัง) อย่างไรก็ตามเมื่อฉันเรียกใช้ด้วยการเข้าร่วมภายในฉันได้รับจำนวนแถวที่แตกต่างกัน - บางครั้งสองครั้งบางครั้งแปด เหตุผลไม่ควรมีความแตกต่างเพราะฉันรู้ว่าแถวที่มี database_ids 1-4 อยู่ในฐานข้อมูล และเนื่องจากเราเลือกจากตารางตัวเลขสุ่มที่มีสี่แถว (ซึ่งต่างจากการเข้าร่วมกับตาราง) จึงไม่ควรมีการส่งคืนเกินสี่แถว สิ่งนี้เกิดขึ้นทั้งใน SQL Server 2012 และ 2014 อะไรคือสาเหตุที่ทำให้ INNER JOIN ส่งกลับจำนวนแถวที่แตกต่างกัน /* Works as expected -- always four rows */ SELECT rando.RandomNumber, d.database_id FROM (SELECT 1 + …
16 sql-server  t-sql 

3
เวลาแฝงของเครือข่ายที่เพิ่มขึ้นจะทำให้ตารางล็อคใน MS SQL Server หรือไม่
ถ้าฉันโทรไปยังฐานข้อมูล SQL Server เพียงครั้งเดียวผ่านเครือข่ายเวลาแฝงที่สูงตารางจะล็อกเกิดขึ้นเนื่องจากเวลาแฝงนั้นหรือไม่ สมมติว่าฉันสืบค้นตาราง A สำหรับระเบียนบางรายการและ SQL Server ต้องส่งคืนข้อมูลนั้นผ่านเครือข่ายที่ช้า - จะมีการล็อกการอ่านบนตาราง A ในขณะที่เซิร์ฟเวอร์ส่งการตอบสนองผ่านเครือข่ายหรือ SQL Server ปล่อยการล็อกก่อนส่ง การตอบสนอง? นอกจากนี้คำตอบจะแตกต่างกันไปตามขนาดของการตอบสนองหรือไม่? ถ้ามันต้องคืน KB สองสามเทียบกับหลายร้อย MB นั่นจะสร้างความแตกต่างได้หรือไม่? การสร้างธุรกรรมที่ชัดเจนการเรียกใช้คิวรีและการปิดธุรกรรมจะทำให้ตารางล็อคเนื่องจากเห็นได้ชัดว่าระยะเวลาของธุรกรรมมีความสัมพันธ์กับเวลาแฝงของฉัน

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