ورود

View Full Version : SP های تودرتو یا جداگانه



sasan_22
یک شنبه 07 آبان 1391, 13:08 عصر
سلام به همگی
من پروژه کتابخونه دارم و می خوام یه روی جدول کتابها - و روی فیلد ناشران فیلتر ایجاد کنم طوری که کاربر (متصدی - کتابدار) ناشر خود را انتخاب کرد رکوردهای مربوطه در گرید پر شه. این قضیه کلی ماجرا
سوال من اینکه باید با یه SP و دستور های IF این کار انجام شه
یا
باید برای هر کدوم از ناشرها یک SP جداگانه بسازم ؟؟؟ (بی زحمت دلیل خود را هم بگیم چون سرعت اجرا و در نهایت خروجی برگردانده شده برام خیلی مهمه-بدون خطا باشه) من خودم دومی رو ترجیح می دم!
در ضمن میخواستم بدونم با View هم میشه این کارو انجام داد؟؟ علاوه بر اون ممکن در برنامه کاربر ناشرای دیگه ای به برنامه ( دیتابیس) اضافه کنه؟ در اون صورت باید چ کرد؟؟؟


با تشکر فراوان

ali_up1
سه شنبه 09 آبان 1391, 09:03 صبح
سلام دوست عزیز
یا بد سوالتو مطرح کردی یا من بد متوجه شدم,
برای فیلتر گذاشتن روی ی فیلد از ی جدول, باید از where توی کوئری ات استفاده کنی, چندتا sp برای چی؟؟
برای سرعت اجرا بالا بهتره از full-text استفاده کنی, که علاوه بر سرعت فوق العاده(مخصوصا توی تعداد رکوردهای زیاد) به شما امکانات دیگه هم میده که احتمالا به کارت بیاد

sasan_22
چهارشنبه 10 آبان 1391, 01:09 صبح
سلام دوست عزیز
ببین من یه جدول کتاب دارم که کلید خارجی خورده به جدول اصلی که ناشره(البته کلی خارجی زیاد داره این یکی از اوناس) حالا می خوام توی برنامم این شرط رو بذارم که بر اساس انتخاب ناشر (یک کمبو که سورسش از جدول ناشر پر می شه) اطلاعات مربوط به کتابهای اون ناشر نمایش داده بشه . مثلا
انتشارات جوان - نص - ایرانیان
حالا توی برنامه ام می خوام اگه نص انتخاب شد کتاب هایی که این انتشارات چاپ کرده از جدول Books نمایش بده
در ضمن کاربر می تونه به جدول انتشارات رکورد جدیدی اضافه کنه (یه ناشر جدید درج کنه) میخواستم بدونم اینو باید با view بنویسم یا با SP? همین

ببخشید که زیاد شد
مرسی

hamidkh
پنج شنبه 11 آبان 1391, 10:08 صبح
سلام
دوست عزیز با SP آشنایی دارین؟ شما یه SP مینویسین که پارامتر ورودیش ID اون ناشر. حالا با یه دستور select از جدول کتابها اونهایی که ناشرشون اون پارامتر ورودی است رو واکشی میکنید.

sasan_22
دوشنبه 15 آبان 1391, 14:30 عصر
سلام
1- دوست عزیز میشه مثال بزنی؟!
2- چرا با ویو این کارو نمی کنی ؟؟؟
3- ایندکس چیست؟؟


ممنون

baktash.n81@gmail.com
چهارشنبه 17 آبان 1391, 09:17 صبح
سلام

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

از نظر برنامه ویو با جدول فرقی نداره از هر دو باید Select بزنید ... ولی اگه ویو شما از چند جدول ایجاد شده شاید فقط حجم درخواستی که سمت سرور می ره کمتر باشه ...

اما ایندکس ... آخر برخی کتاب ها رو که نگاه کنی یه جدول هست که می گه این کلمه توی کدوم صفحه از کتاب به کار رفته ... این در مورد SQL هم صدق می کنه SQL یه جداولی می سازه که توش کلید جدول و آدرس فیزیکی رکوردها رو توش نگهداری می کنه ... به زبان خیلی ساده شما وقتی روی یک فیلد Index قرار می دید SQL یه جدول ایجاد می کنه که بر اساس این فیلد مرتب شده ( و چون جستجو در لیست های مرتب سریعتر هست ) SQL زود تر به نتیجه Query می رسه ... خوب با این حرفا این سئوال مطرح می شه که چرا روی همه فیلد ها ایندکس نمی زاریم ؟! خوب فرض کنید اونوقت ما یه رکورد جدید درج می کنیم ... و SQL باید همه این جداول رو یه بار به روز رسانی کنه و دوباره مرتب کنه که اینکار زمان بر خواهد بود. یعنی عمل درج و به روزرسانی کند می شه ولی عمل جستجو سریعتر می شه ... با توجه به اینکه در مورد برنامه شما زمان درج کتاب تو بانک برای کاربر زیاد مهم نیست ولی زمان جستجو خیلی مهمه می تونید توی ایجاد index ها کاملا ول خرجی کنید ....

sasan_22
چهارشنبه 17 آبان 1391, 13:03 عصر
سلام و درود بر شما
البته جستجو بر اساس نام - ناشر - مترجم - سال چاپ و ... هست حال ,
سوالاتی که برای من ایجاد شد ( و باعث سردرگمی میشه) اینکه :

1- آیا با ایجاد ایندکس حجم بانک اطلاعاتی من بالا می رود؟؟
2- چون جستجو زیادی می توانیم انجام بدیم(نام ناشر و...) آیا ایجاد ایندکس برای همه فیلدهای جستجو مجازه؟؟
3- اگر ایندکس را ایجاد کردیم طرز نوشتن ویو یا SP ب چه صورت خواهد بود؟؟ ( آیا تفاوتی با قبل پیدا می کند)
4- آیا با بکاپ گرفتن و برگرداندن آن , ایندکس ها از بین می روند ؟؟
5- آیا ستون هایی که مقادیر Null می پذیرند می توان روی آنها ایندکس ایجاد کرد؟؟
6- چطور می توان جستجو های ترکیبی انجام داد در حالی که ایندکس های متفاوتی دارند؟؟ (توضیح1)
7- اگر (بفرض) حجم دیسک ما کم باشد آیا ایجاد ایندکس مجاز است؟؟ یا بهتر است اینکدس ایجاد کرده و سپس از ویوها حذف کنیم؟؟ (البته مثال زدم)
8- بر اساس نوع ستون که می توان رشته ای یا عددی باشد چ نوع ایندکسی پیشنهاد می کنید ؟؟
9- آیا در برنامه اصلی مان با ایجاد درج در پایگاه یا ویرایش آن زمانی باید اختصاص بدهیم یا SQL Server این اعمال یعنی

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

را پشت صحنه(یا همان Background) انجام می دهد؟؟
10- آیا این عملیات در سرعت برنامه مان تاثیر دارد یا نه؟؟

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


ممنون

baktash.n81@gmail.com
چهارشنبه 17 آبان 1391, 17:35 عصر
1.بله بالاتر می ره ... بسته به نوع فیلدهایی که روشون ایندکس می زارین راه ...
2.آره برای هر فیلدی که فکر می کنید بر اساس اون زیاد جستجو انجام می شه می تونید ایندکس بزارید ... (اما دقت کنید اگه میزان درج و به روزرسانی روی جدول زیاد هست نباید زیاد ایندکس داشته باشید) ولی در مورد جدول کتابها بیشتر جستجو انجام می شه ... !
3.خیر
4.خیر
5.بله می شود
6. جستجوی شما در حالتی که ایندکس دارید یا ندارید فرقی نمی کنه فقط با ایندکس زودتر نتیجه جستجو رو دریافت می کنید .البته می تونید ایندکس ترکیبی هم بسازید. اما اگه تعداد این ترکیبها زیاد هست روی هر ستون ایندکس بزارید و بقیه رو به SQL
بسپارید...
7.ویو ها فضایی اشغال نمی کنند. کارهای زیادی را می شه انجام داد ... مثل انتقال قسمتی از بانکها روی یه درایو دیگه و صرفنطر از Transaction Log که مباحثش یکم پیشرفته تر می شه ...
8. NonCluster که Unique هم نباشد. فرقی نمی کنه برای هر نوع داده ای ... به جز داده های حجیم روی اونا اصلا Index نزار
9.در واقع در حالت عادی برنامه شما در هنگام درج و به روز رسانی کند عمل خواهد کرد ولی شما کاره زیادی لازم نیست انجام بدید ...
10.بله کلا مبحث ایندکس مطرح شده برای اینکه برنامه سرعت بهتری داشته باشه ... (در واقع بازیابی و جستجو سرعت بهتری داشته باشه)

من فکر می کنم که شما یه دوره SQL بری برات خیلی مفید باشه ...