ورود

View Full Version : سوال: کدام روش برای نمایش رکوردها بهینه تر است؟



mohsen24000
شنبه 03 اردیبهشت 1390, 23:53 عصر
باسلام
بفرمایید کدام شیوه بهینه و سریعتر است:
انتخاب فیلدهای متنی در خروجی کوئری و نمایش آنها در dbgrid یا انتخاب فیلدهای کلیدی و اتصال کوئری به بانک اصلی توسط mastersource و masterfield و نمایش فیلدهای متنی بانک فیلتر شده در dbgrid؟
باتشکر

nilidelphi
یک شنبه 04 اردیبهشت 1390, 15:47 عصر
دوست عزیز اگه می خواهید که جستجوی شما سریعتر انجام شود باید اون فیلدی که برای جستجو مد نظر دارید (میتونه هر نوعی باشه) در اس کیو ال اون فیلد رو Index ش بکن

بعد در کوئریت دستور Select رو بزن اون موقع سرعت جستجوی برنامه ات بیشتر میشه.
در ضمن اینکه کوئریت به جدول خود باید وصل باشه یک حکم نمیشه به یه جدول دیگه وصل بشه.

در ضمن نحوه ی نمایش تو هیچ کدوم از ابزار های Data Control فرق نمیکنه.

mohsen24000
یک شنبه 04 اردیبهشت 1390, 17:14 عصر
باتشکر از شما
سوالم رو واضحتر بیان میکنم:
آیا چند فیلد متنی (چند صفحه) در دستور Select در کوئری باعث کندی سرعت اجرای کوئری می شود یا خیر!؟

pezhvakco
یک شنبه 04 اردیبهشت 1390, 17:22 عصر
آیا چند فیلد متنی (چند صفحه) در دستور Select در کوئری باعث کندی سرعت اجرای کوئری می شود یا خیر!؟
اگه نیاز است که جستجو در داده ها با هر ساختار انجام بشه باید انجامش بدی فقط باید اینو در نظر داشته باشی که در زمان طراحی بانک ساختار ستون ها رو تا جایی که امکان داره بهینه در نظر بگیری .

mohsen24000
یک شنبه 04 اردیبهشت 1390, 17:43 عصر
اگه نیاز است که جستجو در داده ها با هر ساختار انجام بشه باید انجامش بدی
بدون درج نام فیلد در Select هم میشه روی اون فیلد جستجو رو انجام داد!
سوال من اینه که تعداد فیلدها مخصوصا متنی در قسمت Select (بعنوان خروجی) تأثیری در سرعت اجرای کوئری داره!؟
مثلا


Select id,name,family,address,doc from tbl where doc like '%Delphi%';
Select id from tbl where doc like '%Delphi%';

nilidelphi
یک شنبه 04 اردیبهشت 1390, 21:26 عصر
بله دوست عزیز بودن نام چند فیلد در یک کوئری باعث کاهش سرعت جستجو میشه.
برای حل این مشکل شما دو روش رو به نظر من میتونید استفاده کنید :
1- اینکه به جای اینکه چند دستور رو باهم بنویسی با هم Join کنی و از این دستور استفاده کنی . یک راه اده برای اینکار استفاده از View است
2- اینکه از ترنزکشن ها استفاده کنی و بجای اینکه چند عماگر رو در یک Select قرار بدی هر دستور رو در یک سلکت قرار بدی و با ترنزکشن پردازش موازی انجام بدی(البته نه بصورت واقعی موازی این زمانی واقعا موازی میشه که سیستم شما چند CPU داشته باشه

البته اینایی که من گفتم زمانی هست که شما از جند جدول مختلف جستجو کنی.

حالا اگه همه ی فیلد هات از یک جدول هستند می تونی تو جستجو از هر چند نتا فیلد که دوست داری سلکت بزنی ولی باید اینو در نظر بگیری که چون فیلد هیا غیر index از هارد دیسک لود میشن(برعکس فیلد های index) سرعت میاد پایین که برای درمان این هم باید هر فیلدی که در جستجو وجود دارد رو ایندکس قرار بدی که در این صورت هم RAM سیستم زیادی پر میشه.

در هر حال یا باید کندی سرعت رو بخوای یا اشغال زیاد حافظه رو.


موفق باشید

vcldeveloper
دوشنبه 05 اردیبهشت 1390, 00:05 صبح
- اینکه از ترنزکشن ها استفاده کنی و بجای اینکه چند عماگر رو در یک Select قرار بدی هر دستور رو در یک سلکت قرار بدی و با ترنزکشن پردازش موازی انجام بدی(البته نه بصورت واقعی موازی این زمانی واقعا موازی میشه که سیستم شما چند CPU داشته باشه
Transaction ارتباطی با پردازش موازی نداره؛ Transaction زمانی به کار میره که نتیجه دو یا چند عملیات به هم وابسته باشه، و شکست در هر یک از آنها به معنی شکست در کل اون مجموعه عملیات تلقی بشه، و لازم باشه در صورت شکست عملیات، وضعیت بانک به حالت قبل از شروع عملیات برگرده.

nilidelphi
سه شنبه 06 اردیبهشت 1390, 15:31 عصر
ترنزکشن عملی است که اس کیو ال سرور برای سه منظور از اون استفاده میکنه :
1-مدیریت تراکنش ها (همان که شما گفتید)
2-مدیریت بازیافت
3-انجام چندین عمل در آن واحد(اگر سیستم دارای یک CPU باشد بصورت اینترلیو ولی اگر چند CPU داشته باشد بصورت موازی)

vcldeveloper
سه شنبه 06 اردیبهشت 1390, 18:25 عصر
ترنزکشن عملی است که اس کیو ال سرور برای سه منظور از اون استفاده میکنه :
1-مدیریت تراکنش ها (همان که شما گفتید)عزیز جان، تراکنش، ترجمه فارسی Transaction هست؛ پس اینکه بگیم، یکی از کارهای "ترنزکشن" مدیریت تراکنش ها ست، معنی نمیده. نتیجه اینکه، Transaction = ترانزاکشن = تراکنش.

nilidelphi
چهارشنبه 07 اردیبهشت 1390, 10:01 صبح
نه نه نه آقای کشاورز منظور من اینه که اگه از Transaction استفاده کنیم اعمال ما در یک زمان اجرا نمی شوند
و اگر استفاده کنیم تراکنش های ما می توانند بر حسب یکی از isolation level ها مدیریت شود
حال اگر CPU ما تک باشد بر حسب سیاست سیستم عامل بصورت اینتر لیو انجام میشه و اگر چند تا باشد خود انوقت هم هم زمان واقعی میشه.
اما اگر از کد Transactionاستفاده نکنیم همزمانی اجرا مدیریت نمیشه.

این برداشت منه نمیدونم شاید برداشتم اشتباه