PDA

View Full Version : سلام نظرسنجی در مورد حل یک مساله



aloneman2005
یک شنبه 16 خرداد 1389, 13:22 عصر
سلام خسته نباشید
من به عتوان مثال برنامه داروخانه رو مثال میزنم.
من توی یک برنامه ممکن چنیدین داروخانه داشته باشم .مثلا 10 داروخانه در برنامه من ثبت شده.
هر کدوم از این داروخانه ها ممکنه در ماه 40000 هزار نسخه ثبت کنن.
خوب توی یک ماه 10*40000
400000 هزار نسخه و توی یک سال می شه 12*400000 = 4800000
و فکر کنم رقم کمی هم نباشه .
حالا سوالم .
شما اگر می خواهید جدول نسخه رو بسازید برای هر داروخانه یک جدول می سازید یا برای هر
ماه یک جدول می سازید یا تمامی نسخه ها رو در یک جدول ذخیره می کنید.

ASKaffash
یک شنبه 16 خرداد 1389, 14:20 عصر
سلام
تمام نسخه ها در یک جدول و پیش بینی ایندکس مناسب

pezhvakco
یک شنبه 16 خرداد 1389, 18:39 عصر
درود :
به نظر من هر داروخانه یک جدول برای یک سال مناسب تره .

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

البته اگه لازم باشه همیشه با تمام داروخانه ها کار کنی میتونی به گفته ASKaffash (http://barnamenevis.org/forum/member.php?u=63973) عمل کنی فقط برای هر داروخانه و نسخه از شاخص مناسن استفاده کن .

فکر خوش .

حسین شهریاری
یک شنبه 16 خرداد 1389, 23:08 عصر
اگه من باشم تمام نسخه ها را در یک جدول ذخیره میکنم.ولی پایان هر سال دوره مالی ایجاد میکردم.
در کل تمام نسخه ها برای یک سال در یک جدول ذخیره میشن.

aloneman2005
دوشنبه 17 خرداد 1389, 01:51 صبح
اگر تعداد جداول زیاد بشه چه تعثیراتی در Sql ایجاد می کنه .

aloneman2005
دوشنبه 17 خرداد 1389, 02:02 صبح
در ضمن شما نمی توانید متوجه بشوید که پایان هر سال مالی کی اتفاق می افتد .
چون کاربری که سال مالی را ایجاد می کند ممکن است دوباره به ماه قبلی باز گردد .
به نظر شما sql می تونه با ایندکس های مناسب البته با Releation با این تعداد رکورد در یک جدول کار بکنه .
من یه ایندکس روی جدول 40000 رکوردی گذاشتم و دستور Select رو روی آن اجر کردم اصلا می تونم بگم طول نکشید . ولی همون query رو با order به کار بردن و حدود 4 الی 5 ثانیه طول کشید تا اجرا تمام بشه .
می تونم بپرسم چرا.

ASKaffash
دوشنبه 17 خرداد 1389, 09:39 صبح
سلام
Select را اینجا قرار دهید

aloneman2005
دوشنبه 17 خرداد 1389, 16:40 عصر
SELECT noskhe.id, noskhe.rank, noskhe.serialbimeh, noskhe.meli, noskhe.codebimeh, noskhe.noskhedate, noskhe.nf AS illname,noskhe.sumdrug,noskhe.drug, Doctors.doctorcode, Doctors.nf AS doctorname, suborganize.oname, organize.name, noskhe.suborganizeid, organize.pill * noskhe.sumdrug / 100 AS illdrug, organize.porg * noskhe.sumdrug / 100 AS orgdrug, organize.organizeid, noskhe.codepage FROM noskhe INNER JOIN Doctors ON noskhe.doctorcode = Doctors.doctorcode INNER JOIN suborganize ON noskhe.suborganizeid = suborganize.suborganizeid INNER JOIN organize ON suborganize.organizeid = organize.organizeid WHERE
(noskhe.dscode = @dscode) "))

aloneman2005
دوشنبه 17 خرداد 1389, 16:40 عصر
کافیه فقط یه order barash bezaram

aloneman2005
دوشنبه 17 خرداد 1389, 16:42 عصر
لطفا راجع به ایندکس ها بیشتر بگید و من چطور ایندکس رو مدیریت کنم . و کی بسازم اگر یک بار بسازم برای همیشه کافیه و همیشه رکوردها بر حسب اندکس حساب می شوند.
من نظرم اینه که در هنگام خارج شدن هر 100 تغییر در اضافه کردن رکورد ها ایندکس قبلی رو پاک کنم و ایندکس جدید بسازم

محمد سلیم آبادی
سه شنبه 18 خرداد 1389, 05:21 صبح
لطفا راجع به ایندکس ها بیشتر بگید و من چطور ایندکس رو مدیریت کنم . و کی بسازم اگر یک بار بسازم برای همیشه کافیه و همیشه رکوردها بر حسب اندکس حساب می شوند.
من نظرم اینه که در هنگام خارج شدن هر 100 تغییر در اضافه کردن رکورد ها ایندکس قبلی رو پاک کنم و ایندکس جدید بسازم

طبق کوئری که پست کردین یک ایندکس طراحی و ایجاد کردم. لطفا در کوئری آنالیز ابتدا دستور SET STATISTICS IO ON را تایپ و اجرا نموده سپس کوئری را یک بار اجرا کرده و نتیجه ای که مربوط به تعداد خوانده شدن جدول هست را کپی کرده، سپس عبارت CREATE INDEX زیر را روی بانک مورد نظر اجرا کنید و دوباره کوئری را اجرا کنید و همان اطلاعات مربوط به IO را کپی کنید و در این تاپیک پست کنید.

یعنی به این شکل:

SET STATISTICS IO ON;
SELECT noskhe.id,
noskhe.rank,
noskhe.serialbimeh,
noskhe.meli,
noskhe.codebimeh,
noskhe.noskhedate,
noskhe.nf AS illname,
noskhe.sumdrug,
noskhe.drug,
noskhe.suborganizeid,
noskhe.codepage

Doctors.doctorcode,
Doctors.nf AS doctorname,

suborganize.oname,
organize.name,
organize.pill * noskhe.sumdrug / 100 AS illdrug,
organize.porg * noskhe.sumdrug / 100 AS orgdrug,
organize.organizeid,
FROM noskhe
INNER JOIN Doctors
ON noskhe.doctorcode = Doctors.doctorcode
INNER JOIN suborganize
ON noskhe.suborganizeid = suborganize.suborganizeid
INNER JOIN organize
ON suborganize.organizeid = organize.organizeid
WHERE (noskhe.dscode = @dscode)
-------------
PRINT '---==============================================='
------------
CREATE NONCLUSTERED INDEX IX0 ON noskhe (dscode) INCLUDE (doctorcode, id, rank, serialbimeh, meli, codebimeh, noskhedate
,nf,sumdrug,drug,suborganizeid,codepage)
GO
---------------
SELECT noskhe.id,
noskhe.rank,
noskhe.serialbimeh,
noskhe.meli,
noskhe.codebimeh,
noskhe.noskhedate,
noskhe.nf AS illname,
noskhe.sumdrug,
noskhe.drug,
noskhe.suborganizeid,
noskhe.codepage

Doctors.doctorcode,
Doctors.nf AS doctorname,

suborganize.oname,
organize.name,
organize.pill * noskhe.sumdrug / 100 AS illdrug,
organize.porg * noskhe.sumdrug / 100 AS orgdrug,
organize.organizeid,
FROM noskhe
INNER JOIN Doctors
ON noskhe.doctorcode = Doctors.doctorcode
INNER JOIN suborganize
ON noskhe.suborganizeid = suborganize.suborganizeid
INNER JOIN organize
ON suborganize.organizeid = organize.organizeid
WHERE (noskhe.dscode = @dscode)
----------------
PRINT '--=================================='
---------------
SET STATISTICS IO OFF;

ASKaffash
سه شنبه 18 خرداد 1389, 10:07 صبح
سلام
Select این باشد :


SELECT noskhe.id,
noskhe.rank,
noskhe.serialbimeh,
noskhe.meli,
noskhe.codebimeh,
noskhe.noskhedate,
noskhe.nf AS illname,
noskhe.sumdrug,noskhe.drug,
Doctors.doctorcode,
Doctors.nf AS doctorname,
suborganize.oname, organize.name,
noskhe.suborganizeid,
organize.pill * noskhe.sumdrug / 100 AS illdrug,
organize.porg * noskhe.sumdrug / 100 AS orgdrug,
organize.organizeid,
noskhe.codepage
FROM noskhe
Left JOIN Doctors ON noskhe.doctorcode = Doctors.doctorcode
Left JOIN suborganize ON noskhe.suborganizeid = suborganize.suborganizeid
Left JOIN organize ON suborganize.organizeid = organize.organizeid
WHERE noskhe.dscode = @dscode

و این ایندکسها ایجاد شوند :


noskhe --> dscode
Doctors --> doctorcode
suborganize --> suborganizeid
organize --> organizeid