PDA

View Full Version : بهینه کردن جستجو برای تاریخ ذخیره شده به شکل nvarchar



silverfox
شنبه 10 آبان 1393, 21:00 عصر
سلام
یه سیستم قدیمی داریم که توش ساعت ها و تاریخ ها به شکل شمسی و nvarchar ذخیره شدن '1387/02/15' یا '12:05'، داده ها هم بعد از سال ها خیلی زیاد شده و دیتابیس خیلی کند شده طوری که سیستم قابل استفاده نیست.
روی این تاریخ ها query داریم به این شکل که بین 2 تاریخ، قبل از یک تاریخ و یا ساعت و اینا همش به طور مقایسه stringی هست. WHERE Date between ازینا
یه بررسی که انجام دادیم دیدیم یه بخش زیادی از زمان اجرای query ها رو این بخش به خودش اختصاص داده.
sql server 2000 هم هست سیستم، با توجه به اینکه شاید امکان تغییر کد برنامه و استفاده از datatype مناسب تر وجود نداشته باشد(یه سری از کوئری ها hardcode شدن یا داینامیک درون برنامه تولید می شن و برنامه بزرگتر از اونه که بشه به راحتی پیدا کرد و تغییر داده کد رو)، کار دیگه ای هست که بتونیم از طرف DBMS انجام بدیم؟ index گذاری روی این فیلد nvarchar به نظرتون تغییر خاصی ایجاد می کنه؟ پیشنهاد دیگه ای دارین؟

sempay_ninjutsu
دوشنبه 08 تیر 1394, 07:22 صبح
سلام
یه سیستم قدیمی داریم که توش ساعت ها و تاریخ ها به شکل شمسی و nvarchar ذخیره شدن '1387/02/15' یا '12:05'، داده ها هم بعد از سال ها خیلی زیاد شده و دیتابیس خیلی کند شده طوری که سیستم قابل استفاده نیست.
روی این تاریخ ها query داریم به این شکل که بین 2 تاریخ، قبل از یک تاریخ و یا ساعت و اینا همش به طور مقایسه stringی هست. WHERE Date between ازینا
یه بررسی که انجام دادیم دیدیم یه بخش زیادی از زمان اجرای query ها رو این بخش به خودش اختصاص داده.
sql server 2000 هم هست سیستم، با توجه به اینکه شاید امکان تغییر کد برنامه و استفاده از datatype مناسب تر وجود نداشته باشد(یه سری از کوئری ها hardcode شدن یا داینامیک درون برنامه تولید می شن و برنامه بزرگتر از اونه که بشه به راحتی پیدا کرد و تغییر داده کد رو)، کار دیگه ای هست که بتونیم از طرف DBMS انجام بدیم؟ index گذاری روی این فیلد nvarchar به نظرتون تغییر خاصی ایجاد می کنه؟ پیشنهاد دیگه ای دارین؟
index گذاری قطعا تاثیر داره ...پزارشاتی که شما میدین به چه صورتی است؟آیا این گزارشات بصورت آنلاین هست یا خیر؟؟اگر گزارشات بصورت آنلاین نیست میتونی از ssis استفاده کنی و دیتاهاتو تمیز کنی و این ssis رو بصورت شبانه بزاری اجرا بشه و در داخل یه table دیگه بریزی و بعد از اون جدول بخونی.....
باز هم اینها راه کارهایی است که بصورت عمومی است برای دقیق تر باید دیتابیس دیده بشه ....گزارشات شما مشخص بشه و .....
موفق باشید

pezhvakco
دوشنبه 08 تیر 1394, 09:37 صبح
یه بررسی که انجام دادیم دیدیم یه بخش زیادی از زمان اجرای query ها رو این بخش به خودش اختصاص داده.
شاید ساختار VarChar برای ستون تاریخ زیاد مناسب نباشد ولی نباید این جور هم که شما نوشتید سنگین باشه در اجرا.

بد نیست مشکل را در جای دیگه (SP های نوشته شده، فرستادن و گرفتن پارامتر ها، روش نمایش داده ها و ... ) پیگیری نمایید.