PDA

View Full Version : مسئله جستجو در یک بانک با 400 هزار رکورد



kh1387
شنبه 18 شهریور 1391, 08:06 صبح
با سلام
من یه بانک دارم که چهارصد هزار رکورد داره و SQL هم هستش.
میخوام درحالیکه در TextBox متنی رو تایپ می کنم ، در گرید ویو آیتمهای یافت شده رو نمایش بده.
یه query نوشتم که کار می کنه ولی خیلی دیر جواب میده. میخوام ببینم دیگه چه راهی وجود داره که سریعا عمل جستجو رو انجام بده.

tooraj_azizi_1035
شنبه 18 شهریور 1391, 08:46 صبح
Query رو بذار. نوع فیلدها و اندیس ها رو هم بذار.

ijavad
شنبه 18 شهریور 1391, 09:07 صبح
دوست عزیز شما ناچار هستید در select خود از top استفاده کنید تا اینکه تعداد رکورد کمتری در زمان جستجو select شود

matin.soft
شنبه 18 شهریور 1391, 09:07 صبح
محدوده جستجوتون رو کاهش بدین.

Arash_janusV3
شنبه 18 شهریور 1391, 13:48 عصر
اگر جستجوی شما بر اساس تاریخ یا شماره مدرک باشه سریع تر جواب می گیرید
حتی می توانید صفحه بندی کنید یعنی 100 رکورد رو در هر صفحه بگذارید و کاربر برای مشاهده به به صفحات بعدی برود

Yanehsar
شنبه 18 شهریور 1391, 17:00 عصر
اگر جستجوی شما بر اساس تاریخ یا شماره مدرک باشه سریع تر جواب می گیرید
حتی می توانید صفحه بندی کنید یعنی 100 رکورد رو در هر صفحه بگذارید و کاربر برای مشاهده به به صفحات بعدی برود

سلام
فکر اون کاربر بنده خدا هم باشید که مجبور 4000 صفحه رو بره جلو تا موافق بشه اونو پیدا کنه.
یه جستجو پیشرفته بذارید و یه سری آیتم رو از کاربر بگیرید بعد اطلاعات براساس اون اطلاعات بایند کنید به دیتاگرید
حتی بایند کردن چهارصدهزار تا اطلاعات به دیتاگرید کاره وقت گیر و غیرعاقلانه ای هستش به نظر من

Arash_janusV3
شنبه 18 شهریور 1391, 17:07 عصر
سلام
فکر اون کاربر بنده خدا هم باشید که مجبور 4000 صفحه رو بره جلو تا موافق بشه اونو پیدا کنه.
یه جستجو پیشرفته بذارید و یه سری آیتم رو از کاربر بگیرید بعد اطلاعات براساس اون اطلاعات بایند کنید به دیتاگرید
حتی بایند کردن چهارصدهزار تا اطلاعات به دیتاگرید کاره وقت گیر و غیرعاقلانه ای هستش به نظر من

اگر 4000 را بر 100 تقسیم کنیم می شه 40 صفحه
4000 صفحه:متفکر:

اینها روش برای کارایی بالا هستش بالاخره باید یکی رو بسته به نیاز برنامه انتخاب کرد

Mahmoud Zaad
شنبه 18 شهریور 1391, 17:33 عصر
اگر 4000 را بر 100 تقسیم کنیم می شه 40 صفحه
4000 صفحه:متفکر:

اینها روش برای کارایی بالا هستش بالاخره باید یکی رو بسته به نیاز برنامه انتخاب کرد
منم فکر می کنم 400000 (چهارصد هزار) تقسیم بر 100 میشه 4000. اگه توی هر صفحه 10000 رکورد باشه اونوقت میشه 40 صفحه! که فکر نمی کنم اون هم کارا باشه.

Yanehsar
شنبه 18 شهریور 1391, 18:02 عصر
اگر 4000 را بر 100 تقسیم کنیم می شه 40 صفحه
4000 صفحه:متفکر:

اینها روش برای کارایی بالا هستش بالاخره باید یکی رو بسته به نیاز برنامه انتخاب کرد
من 400هزار که دوستمون رو گفتن رو تقسیم بر صدی کردم که شما گفتیت.
حالا همون 40 صفحه شما.شما مییاید بشینید یک صفحه یک صفحه برید جلو تا یک رکورد رو پیدا کنید؟؟؟؟؟؟؟یه بار برید تو گوگل این کار رو بکنید تا صفحه 40 برید جلو دیوانه کننده هستش.

samadblaj
شنبه 18 شهریور 1391, 18:18 عصر
درود به نظر من برای نمایش استفاده از Paging هستش در هر صفحه 50 رکور ، و قرار نیست کاربر کل صفحات رو ببینه.
اینجا نیاز میشه به جستجوی پیشرفته طبق قوانین هر جستجویی زمانبر است نمونه (جستجوی سیستم خودمون.).
وقتی که صفحه بندی باشه سرعت Load ،رم خیلی کاهش پیدا نمیکنه موقع سرچ هم باید پیغامی به عنوان " در حال جستجو " پیدا شه تا کاربر سرگردون نباشه ، قوانینش همینه هیچ راهی هم جز این نیست اون گوگلم به عظمت اون ابر رایانه هاش زمان رو برای ما کوتاه کرده (ولو با هر الگوریتمی).
موفق باشید./

FastCode
شنبه 18 شهریور 1391, 20:19 عصر
گوگل جست و جوی heuristic انجام میده و چند هزار تا کارمند در بخش موتور جست و جوش داره و روزی سه تا تغییر به الگوریتمش میده.
اصولاً نباید با گوگل مقایسه کنید.

samadblaj
شنبه 18 شهریور 1391, 20:50 عصر
عزیزم منم منظور این بود که گوگل با این نوع جستجو ها خیلی متمایزه پس مقایسه ای هم نبود مقایسه با سرچ سیستم خودمون بود.

Yanehsar
شنبه 18 شهریور 1391, 21:45 عصر
عزیزم منم منظور این بود که گوگل با این نوع جستجو ها خیلی متمایزه پس مقایسه ای هم نبود مقایسه با سرچ سیستم خودمون بود.
سلام
دوستان اگر من اسم از گوگل اوردم به این دلیل نبود که الگوریتم گوگل رو با الگوریتم خودمون یا این برنامه مقایسه کنم.با پیشنهاد دادن صفحه بندی که دوستان گفتند منم گفتم برید تو گوگل یه سرچ کوچک بزنید و خودتون تا صفحه 40 نتیجه جستجو رو یکی یکی باز کنید و ببینید چه حالی میشید.به نظر من اگر میخواهید برنامه رو طراحی و بنویسید باید خودتون بذارید جایی کاربر .برنامه باید کاربر پسند باشه و خوش دست نه اینکه برای یه جستجو کاربر کلی درد سر بکشه.از مسیر سوال منحرف شدیم دوستان اگر نظری دارند بگند که مطرح کننده سوال به جواب سوالش برسه
نظر من قبل از بایند کردن یه سری اطلاعات از کاربر بگیریه و بعد اطلاعات رو بایند کنه داخل دیتا گرید.

samadblaj
شنبه 18 شهریور 1391, 22:09 عصر
سلام
دوستان اگر من اسم از گوگل اوردم به این دلیل نبود که الگوریتم گوگل رو با الگوریتم خودمون یا این برنامه مقایسه کنم.با پیشنهاد دادن صفحه بندی که دوستان گفتند منم گفتم برید تو گوگل یه سرچ کوچک بزنید و خودتون تا صفحه 40 نتیجه جستجو رو یکی یکی باز کنید و ببینید چه حالی میشید.به نظر من اگر میخواهید برنامه رو طراحی و بنویسید باید خودتون بذارید جایی کاربر .برنامه باید کاربر پسند باشه و خوش دست نه اینکه برای یه جستجو کاربر کلی درد سر بکشه.از مسیر سوال منحرف شدیم دوستان اگر نظری دارند بگند که مطرح کننده سوال به جواب سوالش برسه
نظر من قبل از بایند کردن یه سری اطلاعات از کاربر بگیریه و بعد اطلاعات رو بایند کنه داخل دیتا گرید.

اصلا کسی منظورش به شما یا روشتون نبود :لبخندساده:
مطمئنن نمیشه کاربر صفحات رو بگرده خسته کننده و وقت گیر !!!!!!!!!!!!!!


وقتی که صفحه بندی باشه سرعت Load ،رم خیلی کاهش پیدا نمیکنه موقع سرچ هم باید پیغامی به عنوان " در حال جستجو " پیدا شه تا کاربر سرگردون نباشه

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

Arash_janusV3
شنبه 18 شهریور 1391, 23:13 عصر
خوب اصولا وقتی صحبت از داده های زیادی می شه باید یک مقدار روش ها رو عوض کرد
حتی اگر منطقی نباشه
مسلما روشی که برای نمایش 100 یا 200 رکورد استفاده می شه از همون روش نمی شه برای 400 هزار یا بیشتر استفاده کرد
اگر دنبال سرعت بیشتر هستید از نظر من دو راه بیشتر ندارید
1_جستجوی پیشرفته شامل فیلتر بر اساس تاریخ و شماره و ...
2_صفحه بندی
و اگر شما در طرحتون از این دو روش به طور همزمان استفاده کنید که حتی کند بودن برنامه به چشم نمی یاد و فوق العاده سریع عمل می کنه
یعنی گزارش هم شامل جستجو باشه و هم صفحه بندی شده
و یک امکان هم اضافه کنید تحت عنوان تعداد رکورد در هر صفحه
یعنی کاربر بتواند از 100 تا 1000 رکورد رو انتخاب کنه و شما بر اساس تعداد رکوردها به کاربر در هر صفحه نمایش بدید
ترکیب اینها یک جستجوی فوق حرفه ای و سریع به وجود میاره و البته به قول دوستان خسته کننده هم نیست:چشمک:

behnam_khademi
شنبه 18 شهریور 1391, 23:36 عصر
با سلام
منم روش های دوستان رو تایید میکنم و فقط این رو به گفته هاشون اضافه میکنم شما برای جستجو بین 400000 رکورد باید جستجی پیشرفته ای داشته باشید و مطمئنا با یک فیلد هم به راحتی نمی تونید این کار رو انجام بدید من خودم برای این جور کارا از این روش استفاده میکنم که سرعت خوبی هم داره.
امیدوارم به دردت بخوره


@aa nvarchar(20)
AS

BEGIN


SELECT * FROM نام جدول


WHERE فیلد مورد نظرت LIKE COALESCE(@aa +'%',فیلد مورد نظرت)

END

FastCode
یک شنبه 19 شهریور 1391, 00:31 صبح
اول بگو چقدر رم میتونی بریزی دور تا بهت بگم چکار کنی.
هر سطر ه جدولت چند بایته؟

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