PDA

View Full Version : سوال: توقف کوئری در اولین نتیجه



behzadkhan
دوشنبه 04 خرداد 1394, 16:51 عصر
با سلام

دوستان عزیز

فرض کنید ما در یک جدول صد هزار تا رکورد داریم و فقط دنبال یک رکورد هستیم و می دانیم که آن رکورد در یک سوم ابتدای جدول وجود دارد.

وقتی با دستور select این کار را انجام می دهیم با هر شرطی هم که براش گذاشته باشیم تمام آن یکصد هزار رکورد را بررسی می کند و در آخر نتیجه را به ما بر می گرداند.

به این شکل باعث ایجاد یک وقفه در حین اجرای برنامه می شویم حالا فرض کنید که تعداد رکورد های خیلی بیشتر از این ها باشد.

می خواهم بدانم آیا راهی هست که وقتی کوئری به اولین نتیجه رسید آنرا برگرداند و دیگر بقیه رکورد ها را بررسی نکند و کارش همانجا خاتمه یابد یعنی بجای بررسی یکصد هزار رکورد فقط یک سوم اول را بررسی کند.

البته اینکه گفتم رکورد مورد نظر در یک سوم ابتدای جدول بود فقط یک مثال بود و می تواند در هر جای جدول باشد.

البته می دانم که می توان در دستور select از TOP و یا LIMIT استفاده کرد. اما مطمئن نیستم مثلا با دستور

SELECT TOP 1 * FROM table_name WHERE ID = 1

بعد از پیدا کردن اولین نتیجه کار کوئری به پایان می رسد یا نه.

همچنین

علاوه بر کوئری با دستور select

می خواهم بدانم راهکار برای دستورهای UPDATE و DELETE هم به چه شکلی می باشد.

نمی دانم چرا دستور TOP برای دستور UPDATE و DELETE کار نمی کند.

================================================== ====================

در صورتی که منظورم را درست متوجه نشدید یا جایی از آن ابهام دارد اعلام کنید تا بیشتر توضیح دهم.

================================================== =============

از هر گونه راهنمایی مشتاقانه استقبال می نمایم.



با تشکر

behzadkhan
پنج شنبه 07 خرداد 1394, 20:19 عصر
با سلام

دوستان عزیز

همچنان منتظر راهنمایی هایتان هستم.

با تشکر

Abbas Amiri
شنبه 09 خرداد 1394, 23:44 عصر
با سلام

دوستان عزیز

همچنان منتظر راهنمایی هایتان هستم.

با تشکر

سلام
از آنجا که شخصا باین حجم اطلاعات کار نکرده ام ، فقط می توانم یافته های جسته گریخته ای که در این مورد داشته ام را ارائه کنم:

برای جستجوی اولین نتیجه در رکوردست ،از FindFirst استفاده کنید و برای دستکاری داده ها از CurrentDb.Execute استفاده کنید.

behzadkhan
یک شنبه 10 خرداد 1394, 16:50 عصر
سلام
از آنجا که شخصا باین حجم اطلاعات کار نکرده ام ، فقط می توانم یافته های جسته گریخته ای که در این مورد داشته ام را ارائه کنم:

برای جستجوی اولین نتیجه در رکوردست ،از FindFirst استفاده کنید و برای دستکاری داده ها از CurrentDb.Execute استفاده کنید.

با سلام

دوست عزیز

فکر می کنم راهنمایی شما مربوط به کدنویسی با ویژوال بیسک درون خود اکسس می باشد.

البته من فقط پایگاه داده ام اکسس می باشد و اپلیکشنم را با سی شارپ نوشتم.

اما منظور من استفاده از یک دستور درون خود کوئری هست.

حالا دقیقا راهنمایی شما را متوجه نشدم.

همچنین من یک لینک پیدا کردم مربوط به یک تابع اکسس در کوئری که اسمش DFirst می باشد.

شاید این تابع همان چیزی باشد که می می خواهم.

لطفا لینک زیر را بررسی نمایید:

http://www.techonthenet.com/access/functions/domain/dfirst.php

و

در صورت امکان ببینید که آیا با استفاده از این دستور می توان مطمئن شد که "کوئری وقتی به اولین نتیجه رسید کارش را خاتمه می دهد و دیگر بقیه سطر ها را بررسی نمی کند".

با تشکر

Abbas Amiri
یک شنبه 10 خرداد 1394, 21:17 عصر
با سلام

دوست عزیز

فکر می کنم راهنمایی شما مربوط به کدنویسی با ویژوال بیسک درون خود اکسس می باشد.

البته من فقط پایگاه داده ام اکسس می باشد و اپلیکشنم را با سی شارپ نوشتم.

اما منظور من استفاده از یک دستور درون خود کوئری هست.

حالا دقیقا راهنمایی شما را متوجه نشدم.

همچنین من یک لینک پیدا کردم مربوط به یک تابع اکسس در کوئری که اسمش DFirst می باشد.

شاید این تابع همان چیزی باشد که می می خواهم.

لطفا لینک زیر را بررسی نمایید:

http://www.techonthenet.com/access/functions/domain/dfirst.php

و

در صورت امکان ببینید که آیا با استفاده از این دستور می توان مطمئن شد که "کوئری وقتی به اولین نتیجه رسید کارش را خاتمه می دهد و دیگر بقیه سطر ها را بررسی نمی کند".

با تشکر

سلام
در مورد DFirst , DLast, DLookup و امثال آن به علت سرعت کم آن جهت استفاده شما توصیه نمی شود.
برای استفاده از قابلیت های برنامه نویسی اکسس می توانید بانک خود را از طریق شیء Access.Application باز کنید و از DAO.Database و DAO.Recordset استفاده کنید. هرچند معمولا از Adodb استفاده میشود

behzadkhan
یک شنبه 10 خرداد 1394, 23:14 عصر
سلام
در مورد DFirst , DLast, DLookup و امثال آن به علت سرعت کم آن جهت استفاده شما توصیه نمی شود.
برای استفاده از قابلیت های برنامه نویسی اکسس می توانید بانک خود را از طریق شیء Access.Application باز کنید و از DAO.Database و DAO.Recordset استفاده کنید. هرچند معمولا از Adodb استفاده میشود

با سلام

دوست عزیز

من از ADO.NET برای برقراری ارتباط با پایگاه داده های اکسس استفاده می کنم.
و
از DAO استفاده نمی کنم.

================================================== =========

با توجه به راهنمایی شما کمی تحقیق کردم و یک جورایی به این نتیجه رسیدم که سرعت DAO با اینکه تکنولوژی قدیمی تری هست از ADO.NET بیشتر می باشد.

اما

دقیقا متوجه نشدم که علت آن چه چیزی هست.

در صورت امکان توضیح دهید که چرا به این شکل هست.

فکر می کنم که مطلب جالبی باشد.

================================================== ==========

متوجه باشید که بحث اصلی ما استفاده از دستوراتی درون خود کوئری برای بالا بردن Performance می باشد.

اما

اکنون در برای اینکه کدام راه در ارتباط با پایگاه داده های اکسس سریعتر می باشد مورد بررسی قرار گرفته است. که البته این هم خیلی جالب می باشد.

================================================== ============

همچنین از راهنمایی هایتان سپاس گذارم.

با تشکر

Abbas Amiri
دوشنبه 11 خرداد 1394, 10:41 صبح
با سلام

دوست عزیز

من از ADO.NET برای برقراری ارتباط با پایگاه داده های اکسس استفاده می کنم.
و
از DAO استفاده نمی کنم.

================================================== =========

با توجه به راهنمایی شما کمی تحقیق کردم و یک جورایی به این نتیجه رسیدم که سرعت DAO با اینکه تکنولوژی قدیمی تری هست از ADO.NET بیشتر می باشد.

اما

دقیقا متوجه نشدم که علت آن چه چیزی هست.

در صورت امکان توضیح دهید که چرا به این شکل هست.

فکر می کنم که مطلب جالبی باشد.

================================================== ==========

متوجه باشید که بحث اصلی ما استفاده از دستوراتی درون خود کوئری برای بالا بردن Performance می باشد.

اما

اکنون در برای اینکه کدام راه در ارتباط با پایگاه داده های اکسس سریعتر می باشد مورد بررسی قرار گرفته است. که البته این هم خیلی جالب می باشد.

================================================== ============

همچنین از راهنمایی هایتان سپاس گذارم.

با تشکر

سلام
به دلیل اینکه شما در محیط بیرون از اکسس کار می کنید توضیح زیادی ندارم فقط توجه شما را به لینک زیر جلب می کنم. بخش مربوط به Performace Data را نگاه کنید:
https://msdn.microsoft.com/en-us/library/office/ff965871%28v=office.14%29.aspx#DataProgrammingWith Access2010_Performance

behzadkhan
دوشنبه 11 خرداد 1394, 11:45 صبح
سلام
به دلیل اینکه شما در محیط بیرون از اکسس کار می کنید توضیح زیادی ندارم فقط توجه شما را به لینک زیر جلب می کنم. بخش مربوط به Performace Data را نگاه کنید:
https://msdn.microsoft.com/en-us/library/office/ff965871%28v=office.14%29.aspx#DataProgrammingWith Access2010_Performance

با سلام

دوست عزیز

خیلی هم عالی
====================

می توانید یک ترجمه روان از متن زیر که در لینکی که گفتید وجود داشت ارائه دهید.

متن مورد نظر:




Note


All benchmark programs were run as console applications except VBA DAO code which was run from the VBA/VBE environment. This means that VBA code was the only program that had a privilege of executing within the same address space of MSAccess.exe which resulted in a significant reduction of Disk I/O operations and page faults improving the overall performance.

با تشکر

saeed1234n
سه شنبه 12 خرداد 1394, 16:37 عصر
با سلام


All benchmark programs were run as console applications except VBA DAO code which was run from the VBA/VBE environment. This means that VBA code was the only program that had a privilege of executing within the same address space of MSAccess.exe which resulted in a significant reduction of Disk I/O operations and page faults improving the overall performance.


همه برنامه ها بعنوان يك برنامه كنسول اجرا مي شوند بجز كدهاي VBA DAO كه از محيط VBA/VBE اجرا مي شوند
به اين معني كه كد VBA تنها برنامه اي است كه داراي مزيت اجرا از درون همان فضاي آدرس از MSAccess.exe است كه
كه منجر به كاهش قابل توجه از خطاهاي صفحه و عمليات Disk I/O و بهبود كلي عملكرد مي شود .

behzadkhan
جمعه 15 خرداد 1394, 00:22 صبح
با سلام

به همه کاربران سایت

در مورد سوالم در سایت www.7khatcode.com

به یک جواب با دلیل رسیدم.

لطفا لینک زیر را بررسی نمایید:

http://www.7khatcode.com/7207/%D8%AA%D9%88%D9%82%D9%81-%D8%AF%D8%B1-%D8%AD%DB%8C%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%DB%8C%DA%A9-%DA%A9%D9%88%D8%A6%D8%B1%DB%8C-%D8%A8%D8%A7-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-sql

و

نظر خودتان را درباره اش عنوان کنید.

با تشکر