PDA

View Full Version : یک روش جستجوی خیلی سریع در دیتابیس ؟؟



shahrzad87
شنبه 26 شهریور 1390, 22:48 عصر
سلام
من یک برنامه فکس کامپیوتری دارم می نویسم و پایگاه داده هام هم sql هست که تعداد رکوردهای برنامه خیلیییی زیاده..... می خوام وقتی کسی مثلا برای دومین بار تلفن می زنه به همراه شماره تلفن تمام مشخصات و اطلاعاتش خیلی سریع نمایش داده بشه، از چه روشی استفاده کنم ؟ جستجو رو چطور بنویسم که با وجود تعداد رکودهای خییلییی زیاد سریع نتیجه رو نمایش بده؟

مثل دستگاه ATM که بعد از وارد کردن رمز خیلی سریع اطلاعات کاربر رو نمایش میده...

Sundown
شنبه 26 شهریور 1390, 23:43 عصر
باید از دیتابیس هایی چون SQL server استفاده شود
تا حد ممکن جدول ها بهینه طراحی شود و برای مثال از ارتباط جدول با یکدیگر تا حد ممکن پرهیز شود.
فیلد های جداول که جستجو بر اساس آن ها صورت میگیرد باید شاخص گذاری شوند
نحوه جستجو با استفاده از امکاناتی چون روال های ذخیره شده استفاده شود.
تا حد ممکن از selectفیلدهای غیر ضروری و join کردن های بیهوده جلوگیری شود.
در طراحی دیتابیس فیلدهای complex طراحی نشوند ( فیلدهایی که تجزیه پذیر باشند)
در سطح زبان برنامه نویسی حدالامکان از امکاناتی چون linq برای ارتباط با دیتابیس و در linq از امکاناتی نظیر compiled query برای ارتباط با stored procedure ها استفاده شود.
شاخص های گذاشته شده روی دیتابیس مرتبا re builed شوند.

در کل باید از جدیدترین امکانات چه در سطح طراحی و چه در زبان برنامه نویسی استفاده کنید و البته دانش وسیعی در طراحی پایگاه داده داشته باشید

shahrzad87
یک شنبه 27 شهریور 1390, 12:05 عصر
ممنون.
برای جستجو بهتر هست از چه الگوریتمی استفاده کنم؟
میشه بیشتر توضیح بدین ؟؟ :)

Sundown
دوشنبه 28 شهریور 1390, 12:26 عصر
برای جستجو از طریق زبان برنامه نویسی توی دیتابیس باید از ارسال دستور اس کیو ال به پایگاه داده استفاده کنید. اما گفتم امروزه از Linq در دات نت استفاده میشه. البته در همون Linq to Sql هم روش هایی برای جستجوی سریعتر وجود داره مثل Compiled Query یا در سطح پایگاه داده هم میبایست از Stored Procedure ها استفاده کنید.

shahrzad87
دوشنبه 28 شهریور 1390, 20:45 عصر
تو جدول شماره تلفن یک فیلد id دارم که اتوماتیک زیاد می شه و کلید اصلی هست، وقتی خواستم با دستور زیر روی فیلد تلفن index clustered بسازم خطا داد که جون یک فیلد کلید دارم و اتوماتیک ایندکس هست نمی تونم فیلد دیگه ای رو کلاسترد ایندکس تعریف کنم !!

CREATE UNIQUE CLUSTERED INDEX index_tell
ON tbl_user ( tellNumber ASC)




چه الگوریتمی سریع ترین جستجو رو انجام می ده؟
کوئری جستجو رو چطور بنویسم که سریعترین جواب رو بهم بده ؟؟؟
می خوام با اولین زنگ تلفن تمام مشخصات رکورد مربوط به شماره تلفن رو نمایش بده، تعداد رکوردهای جدول تلفن به 4، 5 میلیون هم می رسه ، جستجوی خیلی سریع و دقیقی می خوام :)

mohsen.net
پنج شنبه 21 مهر 1390, 10:12 صبح
فقط یک ایندکس کلاستر می توانی بسازی در هر جدول
و 999 تا nonecluster

پس ایندکس جدیدت را باید nonecluster بسازی