กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
338 5
URL.หัวข้อ /
URL
Ant
compact data ก็แล้วค่ะ ข้อมูลประมาณ +100,000 Record ค่ะ
มีวิธีที่จะเพิ่มความเร็วได้หรือเปล่าค่ะ
มีวิธีที่จะเพิ่มความเร็วได้หรือเปล่าค่ะ
5 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R00096
ขอโทษค่ะ..สลับชื่อกับคำถามค่ะ
คำถาม : Query ข้อมูลนานมาก..ไม่ทราบจะแก้ไขอย่างไรดีค่ะ
2 @R00097
คงจะต้องดูว่าเป็น Query ประเภทไหน เช่น เป็น Select Query, Crosstab Query หรือ Action Query
โดยทั่วไป Select Query จะทำงานไวกว่าเพื่อน แต่ถ้าจะให้ไวก็ต้องดูก่อนว่า มีการเรียกแสดงข้อมูลจากตารางกี่ตาราง และมีการกำหนดให้มีการกรองข้อมูลด้วยหรือไม่ ถ้ามี กรองด้วยฟีลด์ไหน ฟีลด์นั้นก็ควรทำ Index ด้วย
ถ้าเป็น Crosstab Query ก็จะช้ากว่าเยอะ ผมมักจะทำการแปลงให้เป็นตารางใหม่ก่อนที่จะแสดงผล หรือออกรายงาน โดยการใช้โค้ดเป็นตัวทำงาน มีขั้นตอนดังนี้
1. สร้าง Crosstab Query แล้วตั้งชื่อไว้
2. สร้าง MakeTable Query โดยให้ Crosstab Query ในข้อ 1 เป็น Source ในการสร้าง
3. เขียนโค้ดคล้ายๆ นี้
Dim dbs As Database
Set dbs =CurrentDB
dbs.Execute ชื่อในข้อ 2
dbs.Close
ถึงแม้จะเป็นแค่ Select Query แต่มีข้อมูลเยอะ และดึงมาจากหลายตารางรวมกัน ก็ควรจะสั่งงานด้วยโค้ดก่อน เพราะทำงานได้เร็วมาก โดยการแปลงให้เป็น Make Table Query เพื่อไปสร้างตารางใหม่ แล้วจึงเรียกดูจากตารางที่สร้างขึ้นใหม่ หรือสร้างรายงานจากตารางนี้โดยตรง
และดูด้วยว่าข้อมูลไหนที่ไม่ค่อยได้ใช้งานบ่อย เช่นข้อมูลของปีที่แล้ว อาจจะนำไปเก็บไว้ในตารางหนึ่งต่างหาก จะทำให้ข้อมูลน้อยลง
ถ้าเป็นการทำรายงาน ก็ควรจะสั่งปริ้นท์ออกเครื่องปริ้นเตอร์เลย ไม่ต้องดูรายงานก่อนการพิมพ์ เพราะจะเสียเวลา
ถ้ายังไม่กระจ่าง ก็ให้ลองสอบถามเข้ามาได้อีกครับ
3 @R00100
ก่อนอื่นต้องขอโทษก่อนค่ะที่เข้ามาตอบช้าค่ะ คือเข้ามาแล้ว ไม่มีรายการคำถามให้เลือกเข้าไปดูกระทู้ที่ตั้งไว้เลยค่ะ..
Query ที่ใช้เป็นประเภท Select Query ค่ะแต่ใช้ซ้อนกันอยู่ค่ะเช่น
ถ้าต้องการรายงานสินค้าคงเหลือ ณ วันที่ต้องการ
Q1: 'เลือกสินค้าแต่ละชนิดก่อนวันที่ต้องการ
SELECT Tbl2.id, Tbl2.xDate, Tbl2.xDoc, Tbl2.xAddr
FROM Tbl2
GROUP BY Tbl2.id, Tbl2.xDate, Tbl2.xDoc, Tbl2.xAddr
HAVING (((Tbl2.xDate)<[Forms]![FrmReport]![xDate]))
ORDER BY Tbl2.id, Tbl2.xDate;
Q2: 'เลือกวันที่ล่าสุดข้อสินค้าแต่ละชนิด
SELECT Q1.id, Max(Q1.xdate) AS MaxOfxdate
FROM Q1 GROUP BY Q1.id ORDER BY Q1.id;
Q3: 'เลือกสินค้าที่ยังไม่ได้ขายไปไว้ตาราง Temp_Report S=ประเภทเอกสารการขาย
INSERT INTO Temp_Report ( id, xDate, xAddr, xDoc )
SELECT Q1.id, Q1.xDate, Q1.xAddr, Q1.xDoc
FROM Q2 INNER JOIN Q1 ON (Q2.MaxOfxdate = Q1.xDate) AND (Q2.id = Q1.id)
GROUP BY Q1.id, Q1.xDate, Q1.xAddr, Q1.xDoc
HAVING (((Q1.xDoc) Not Like '?S*'))
ORDER BY Q1.id;
Q4: 'เพิ่มข้อมูลที่เหลือลงตาราง Temp_Report
UPDATE Tbl1 AS Tbl3 INNER JOIN (Tbl1 INNER JOIN Temp_Report ON Tbl1.id = Temp_Report.id) ON Tbl3.X1 = Tbl1.X1 SET
Temp_Report.X1 = [Tbl1].[x1], Temp_Report.X2 = [Tbl1].[x2], Temp_Report.X3 = [Tbl1].[x3], .................... ;
แล้วแสดงผลตาราง Temp_Report ทางรายงาน หรือออกเครื่องพิมพ์
Tbl1 มี **ที่ >3000 record
id ,long Pk index =Yes (No Duplicates)
x1,long index =Yes (Duplicates OK)
n2 ,Txt
n3 ,Txt
n4 ,Txt
n5 ,Txt
Tbl2 มี **ที่ >100,000 record
id ,long index =Yes (Duplicates OK)
xDate ,date
xDoc ,Txt 8 ประเภทเอกสารรับ, ย้ายที่เก็บ, การขาย ,... ** ย้ายที่เก็บจะมีบ่อยครั้งมากแต่ละ id **
xAddr ,Byte ที่เก็บ,ขายปัจุบัน
ปล. ขณะนี้ลอง ChkDisk+Defragmenter+ComPactData แล้วดีขึ้นมาหน่อยค่ะ
ถ้าใช้ dbs.Execute "QryName" มักจะขึ้นข้อความว่า '...ต้องการพารามิเตอร์เท่ากับ1..หรือ2..'
แต่ถ้าใช้ Docmd.RunSQL "QryName" แทนจะไม่มีปัญหาค่ะ
และ Access ธรรมดา (*.mdb) กับแบบโครงการ (*.adp) แตกต่างกันอย่างไรค่ะ
และถ้านำ Table,Qry,Form,Module ที่ใช้อยู่ไปใช้ได้เลยหรือเปล่าค่ะ
4 @R00103
วันก่อนผมเข้าไปที่
http://www.databasecreations.com/largedb.htm
เขาแนะนำให้ทำการสร้างฐานข้อมูลขึ้นมาใหม่ แล้ว Import ทุกอย่างจากฐานข้อมูลเดิมมาไว้ แล้วทำการ Compile จะทำให้ฐานข้อมูลทำงานได้ไวขึ้น
ถ้าใช้ dbs.Execute "QryName" มักจะขึ้นข้อความว่า '...ต้องการพารามิเตอร์เท่ากับ1..หรือ2..'
แต่ถ้าใช้ Docmd.RunSQL "QryName" แทนจะไม่มีปัญหาค่ะ
---> ที่มีปัญหาเพราะว่า ไม่มีการทำให้เป็น Parametered query ที่แล้วจริง โดยการไปที่ Tools>Parameters...>แล้วจึงใส parameter ลงไป
เมื่อมาเขียน SQL ก็ต้องใช้ QueryDef แล้วจึงใช้ RecordSet ได้
และ Access ธรรมดา (*.mdb) กับแบบโครงการ (*.adp) แตกต่างกันอย่างไรค่ะ
และถ้านำ Table,Qry,Form,Module ที่ใช้อยู่ไปใช้ได้เลยหรือเปล่าค่ะ
ADP เป็นการเรียกใช้ข้อมูลจาก SQL Server ซึ่งจะต้องมีการปรับปรุงบ้าง เช่น การตั้งชื่อ Field ต้องไม่มีเว้นวรรค หรือตัวใหญ่ เป็นต้น ถ้าทำโครงสร้างไว้ดี จะสามารถใช้ได้เกือบทุกตัวครับ
ส่วนข้อแนะนำเกี่ยวตัวอย่าง query ที่ได้ให้ดูข้างต้น ผมจะกลับมาตอบอีกที่ครับ
5 @R00105
ขอขอบคุณอีกครั้งค่ะ
Time: 0.1150s