ورود

View Full Version : سوال: سورت نشدن فیلد ها



antisocial
دوشنبه 17 فروردین 1388, 21:52 عصر
با سلام
ما یه جدول داریم که یه فیلدش رو براش Sequence تعریف کردیم و تعداد داده توی اون خیلی زیاده .اما این فیلد همیشه نا منظمه
مگه خودش نباید همیشه سورت شده باشه؟
چون PK هست.؟و اتو نامبره؟
چون ما اگه بخوایم اینو از تو برنامه سورت کنیم خیلی طول میکشه.تعداد داده توش خیلی زیاده
چطور میشه یکار کرد پیش فرض همیشه به ترتیب صعودی سورت شده باشه؟
دوستان اگر کمک کنند ممنون میشم

amir1982
جمعه 21 فروردین 1388, 11:09 صبح
شما اطلاعات وارد شده را در جدول بصورت نتیجه query‌در محیطی مانند TOAD یا هر محیط SQL Manager‌ دیگری میبینید. درواقع چیزی که شما میبینید نتیجه یک query است نه اطلاعات منطقی مورد نیاز شما از جدول. PK بودن یک فیلد تضمین میکند که روی آن ایندکس باینری تعریف میشود اما این ربطی به خروجی نداردٰ بیاد داشته باشید که هر جا چه در گزارشات مانند Report Builder و یا Discoverer و یا در فرمهای خود در محیط ویندوز یا فرمهای اوراکل یا محیط وب با تولزی مانند Jdeveloper حتماً باید اطلاعات خروجی دیتی بلاک یا دیتا مدل خود را از طریق کد اسکریپت آن و یا Propertyهای آن بصورت Order by استخراج کنید .
اگر اطلاعات کافی نیست یا نیاز به راهنمائی بیشتر دارید اطلاع دهید

antisocial
شنبه 22 فروردین 1388, 00:15 صبح
دوست عزیز خیلی ممنون ازینکه این جواب رو دادید
اما موضوع اینه که من اگر بخوام با دستور OrderBy حدود 6 میلیون رکورد رو برای صفحه بندی سورت کنم ، خیلی زمان میبره و این حالت خوبی نیست.
اما تا اونجایی که من دیدم تو SQL این اتفاق نمی افته ، خود به خود یه فیلد اتو نامبر همیشه مرتب شدس.من دنبال یه راهی میگردم که در اوراکل هم این اتفاق بیفته
به هر حال ممنون از راهنماییتون

amir1982
شنبه 22 فروردین 1388, 20:11 عصر
بله حق با شماست. در MS SQL این کار انجام میشه اما دقیقاً به همون دلیلی که گفتید سورت کردن اون مجموعه سخته، اوراکل بهتر عمل میکنه. پیشنهادم اینه که توابع SQL مخصوص اوراکل رو مطالعه کنید البته این 6 میلیون رکورد اگر سرور مناسبی داشته باشید، Where clauseها رو به جا استفاده کنید و مجموعه مورد نیاز رو سورت کنید و نه کل مجموعه رو، مطمئن باشید با هیچ مشکلی از بابت کارائی روبرو نمیشید.

antisocial
جمعه 28 فروردین 1388, 17:36 عصر
ببینید من با این فرمان این رکوردارو میارم
select .... from table where . .and ...and...and and rownum<=100 order by id asc
من در واقع همش صد رکورد رو میارم اما موضوع اینه که من میخوام تمام این رکوردارو پیج بندی کنم توی دیتا گریدالانم کار میکنه اما سرعتش خیلی پایینه .صفحه بندی هم انجام دادم خیلی جالب شده اما حیف سرعتش پایینه.حلالا مشکلی نیست.باز هم ممنون از راهنماییتون
در ضمن من به یه مشکل عجیب و غریب برخوردم اونم این که من وقتی مینویسم rownum<=5 (مثلا کاربر تعیین کنه که چند رکورد توی هر صفحه ببینه) اوراکل اعداد رو اشتباه سورت میکنه یعنی دقیقا میره سه تارکورد از بزرگترینا میاره دوتا هم از اول فکر میکنید دلیلش چی باشه؟من بارها چک کردم کاملا اشتباه سورت انجام میشه.اما هنگامی که میگم rownum<=50 به بالا درست کار میکنه.واقعا عجیبه.چکار باید کنم این مشکل حل بشه؟
آییا ایندکس ها در این قضیه دخالت دارند؟
با تشکر