מה יותר מהיר ?

maximon

New member
מה יותר מהיר ?

אני מתקשר עם SQL דרך ASP ואני מעוניין לשלוף נתונים ולדעת כמה רשומות נשלפו.
האם לעשות משפט SQL אחד שמכיל recordcount
או לעשות שני משפטי SQL אחד מכיל את הפונקציה Count על מנת לדעת את המספר ואחד מכיל את שליפת הנתונים עצמם
 

maximon

New member
יש אפשרות להכניס את זה במשפט SQL אחד ?

כי אני פונה למסד נתונים דרך ASP ובשתי קריאות זה לא עובד
 

maximon

New member
ניסיתי לעשות כך:

SELECT *, @@ROWCOUNT AS NumberOfRowsThatReturn FROM TBL_Users Where ViewStatus=1


וזה נותן מספר שלא קשור בכלל
 

AvidaEinav

New member
שימוש ב UNION

אבל כך בחשבון שתצטרך להשלים את השדות הנותרים עם NULLים.
כלומר: אם הפלט של הטבלה המקורית שלך הוא עם 5 שדות, אז באיחוד
תצטרך לשים 4 NULLים ולדחןף את זה באחד השדות (ראה דוגמא בקובץ).

למרות שהדרך הזאת מכוערת ולא ככה עובדים, יש לך אפשרות להשתמש ב STORED PROCEDURE ואז לצפות לפלט של 2 טבלאות בקריאה אחת.. וזאת הדרך הנכונה והמהירה ביותר.
 

pitoach

New member
אני מציע להפסיק את הדיון בכיוון זה


אתם חושבים כיצד להמציא את הגלגל בזמן שאתם נוסעים ברכב


אם הוא צריך את מספר הרשומות רק באפליקציה והוא כבר מעביר את הרשומות לאפליקציה אז האפליקציה כבר יודעת בדיוק מה מספר הרשומות ולא צריך את הנתון ממסד הנתונים

אם הייתם צריכים את הנתון לצורך השאילתה או המשך פעולה במסד הנתונים זה משהו אחר. אבל אם כל הצורך לקבל את המספר בסיום אז יש לו אותו כבר באפליקציה והוא הגיע במטא דטא גם ממסד הנתונים בלי שביקשתם אותו.
 

maximon

New member
ואיך האפליקציה יודעת את מספר הרשומות...

ללא שימוש בrecordcount ?
 

pitoach

New member
תקרא מה שכתבתי למטה, הסברתי שם יותר ואם עדיין

לא ברור תספר לנו באיזה טכנולוגיה ובאיזה שפה אתה עובד ואני אנסה לפרט יותר.

* תוספת למה שרשום למטה: הרעיון הוא שזה נתון שמגיעים אליו ברמת האפליקציה כדי לחסוך את תעבורה מיותר ו/או שאילתה נוספת. זה נתון שהוא לא מצריך עבודה ברמת האפליקציה והוא קיים באופן מיידי בכל אובייקט מסוג אוסף או כל התבססות על מערך פשוט באפליקציה
 

maximon

New member
אני עובד עם asp קלאסי וsql server 2008 r2

בasp קלאסי נראה לי שהאובייקט היחיד של ADO הוא recordset
שהוא די מוגבל ביחס לdataset
 

pitoach

New member
ASP קלאסי קיים מאפיין מובנה rs.RecordCount

אם לדייק זה מאפין של ADO וב ASP קלאסי עובדים עם ADO
http://www.w3schools.com/ado/prop_rs_recordcount.asp

הערה: השימוש בפועל וההחלטה מה מתאים לך תלוי במה אתה עושה בפועל עם הרשומות. לא תמיד השימוש במאפיין זה הכי נוח או הדרך הכי יעילה. צריך להשאיר משהו למפתח להחליט


למשל אם אתה מעביר את הנתונים במילא למערך אז אתה יכול לעבוד ישירות עם COUNT על המערך. אם אתה מבצע לולאה בכל מקרה אז לפעמים נוח לבצע בדיקה בזמן הלולאה שבמילא מצתבצעת ולפעמים נוח פשוט לעבוד עם מה שמובנה ב ADO כמו RecordCount

תבדוק מה מתאים לך
 

pitoach

New member
והנה דוגמה לעבודה עם מערך פשוט

' נכסני את הנתונים למערך מייד בהוצאה שלהם
' בעבודה עם GetRows יש עד יתרונות כמו אפשרות לקבוע כמה נתונים להוציא וויצירת חלוקה לעמודים ועוד
rsArray = rs.GetRows()
' עתה יש לנו מערך פשוט דו מימדי ולכן ניתן לבדוק מייד כמה רשומות או מה גודל המימד השני שזה מספר השורות
RowNumber = UBound(rsArray, 2) + 1
 

pitoach

New member
למה לא האפשרות השלישית ?!?

2 האפשרויות הנ"ל אינן טובות ולא נכונות אם זה כל האפיון שלך
אם כבר הורדת את כל הרשומות האפליקציה כבר יודעת כמה רשומות יש שם ולא צריך לשאול את מסד הנתונים.
אם הכנסת את הרשומות לאובייקט אוסף כלשהו כמו LIST או אובייקט DATATABLE או DATASET או כל אוביקט אחר הרי שאתה יכול ישירות באפליקציה עתה לבצע COUNT על האוסף שלך.
 
למעלה