View Full Version : تاخير در INSERT
mehdis2
شنبه 24 مهر 1389, 00:58 صبح
سلام
من يه دستور نوشتم كه اطلاعات درج ميشه ولي ORDER كه انجام دادم اعمال نميشه يتابيس سنگينه
insert into #t1 select from t2 order bt date
:ناراحت:
بهزادصادقی
شنبه 24 مهر 1389, 01:32 صبح
سلام
من يه دستور نوشتم كه اطلاعات درج ميشه ولي ORDER كه انجام دادم اعمال نميشه يتابيس سنگينه
insert into #t1 select from t2 order bt date
:ناراحت:
در SQL Server مفهوم ترتیب جدول وجود ندارد. جداول مرتب نیستند و اگر هم گاهی مواقع به صورت تصادفی به نظر میرسد مرتب هستند، ترتیب سطرهای آن خیلی راحت و به صورت راندوم می تواند تغییر کند. بنابرین، قسمت order by دستور شما هیچ تاثیری ندارد.
برای اینکه بتوانید سطرهای موجود در یاک چدول را با ترتیب خاصی ببینید، باید یک دستور select بزنید که در قسمت order by آن ترتیب مورد علاقه خود را درخواست می کنید. خود جدول هیچ ترتیب خاصی ندارد.
حمیدرضاصادقیان
شنبه 24 مهر 1389, 07:42 صبح
در SQL Server مفهوم ترتیب جدول وجود ندارد. جداول مرتب نیستند و اگر هم گاهی مواقع به صورت تصادفی به نظر میرسد مرتب هستند، ترتیب سطرهای آن خیلی راحت و به صورت راندوم می تواند تغییر کند. بنابرین، قسمت order by دستور شما هیچ تاثیری ندارد.
برای اینکه بتوانید سطرهای موجود در یاک چدول را با ترتیب خاصی ببینید، باید یک دستور select بزنید که در قسمت order by آن ترتیب مورد علاقه خود را درخواست می کنید. خود جدول هیچ ترتیب خاصی ندارد.
سلام.البته جداولی که غیر ایندکس یا کلید هستند. وقتی جداول دارای کلید اصلی هستند ، خود محتویات در page ها به صورت مرتب ذخیره می شوند به همین خاطر هست که وقتی شما اطلاعات رو از جدولی که کلید اصلی دارد فراخوانی میکنید اون اطلاعات به شما به صورت مرتب شده نمایش داده می شود البته ترتیب اون براساس کلید شما می باشد.
در جداولی که از ایندکس های Non Clustered برای مرتب سازی استفاده میکنند به صورت فیزیکی در page ها مرتب نمی شود فقط هنگام فراخوانی در حافظه Ram مرتب شده و به کاربر نمایش داده می شود.
موفق باشید./
بهزادصادقی
شنبه 24 مهر 1389, 08:15 صبح
سلام.البته جداولی که غیر ایندکس یا کلید هستند. وقتی جداول دارای کلید اصلی هستند ، خود محتویات در page ها به صورت مرتب ذخیره می شوند به همین خاطر هست که وقتی شما اطلاعات رو از جدولی که کلید اصلی دارد فراخوانی میکنید اون اطلاعات به شما به صورت مرتب شده نمایش داده می شود البته ترتیب اون براساس کلید شما می باشد.
در جداولی که از ایندکس های Non Clustered برای مرتب سازی استفاده میکنند به صورت فیزیکی در page ها مرتب نمی شود فقط هنگام فراخوانی در حافظه Ram مرتب شده و به کاربر نمایش داده می شود.
موفق باشید./
شاید من اشتباه می کنم، ولی آن چه به یاد می آورم یا باور دارم این است که SQL Server فرق می گذارد بین مرتب بودن فیزیکی سطرهای یک جدول (که می توان با استفاده از یک clustered index به آن رسید) و logical requirement ای برای گارانتی کردن ترتیب سطرهایی که یک دستور select باز می کرداند.
به عبارت دیگر، تا آنجا که من می دانم، تعریف خود زبان SQL این است که یک دستور select ذاتا هیچ ترتیب خاصی را برای سطرهای نتیجه اش گارانتی نمی کند مگر اینکه از order by استفاده می کنید. حتی اگر به خاطر هر نوع شرایطی خاص فیزیکی، SQL Server همیشه با یک ترتیب خاصی آن سطرها را باز می گرداند.
تا آنجا که من می دانم، وقتی شما از order by استفاده نمی کنید، استاندارد SQL به شما می گوید هیچ انتظار خاصی نباید در مورد ترتیب سطرهای نتیجه داشته باشید و باید کاملا این آمادگی را داشته باشید که ترتیب این سطرها از یک فراخوانی تا فراخوانی دیگر فرق کند.
وقتی دستور select شما ساده است، شاید هیچ وقت این اتقاق نیافتد. ولی وقتی پیچیدگی دستور بالا می رود، تعداد join ها زیاد می شود، و تعداد Index های موجود هم بالاست، آن وقت امکان می رود که SQL Server این گزینه را داشته باشد که از چند راه مختلف به آن سطرهای نتیجه دستور select برسد، و در آن صورت، این امکان می تواند پیش بیایید که نتایج select ترتیب خاصی نداشته باشند.
حمیدرضاصادقیان
شنبه 24 مهر 1389, 08:53 صبح
سلام.بله.این صحبت شما با صحبت پیشین مقداری تفاوت کرد یا حداقل من اینطوری متوجه شدم.
حرف شما صحیح است و در دستور Select هیچ تضمینی برای مرتب بودن اطلاعات نمی باشد.
من برداشتم از صحبت قبلی شما این بود که شما فرمودید خود جدول هیچ نوع ترتیب خاصی ندارد که من عرض کردم در صورتی که ایندکس نداشته باشد. ولی این گفته شما صحیح است که اگر در Select ما از order by استفاده نکنیم و اگر داده ها به صورت مرتب نباشن هیچ تضمینی وجود نداره که به صورت مرتب به ما نمایش بده.
ولی اگر داده ها مرتب باشن اون موقع اگر order by هم استفاده نکنیم براساس همون ترتیب به ما نمایش داده خواهد شد.
چون اطلاعات از page ها خوانده شده و Page ها به صورت Linked List به هم متصل می باشند و SQL Server این Page ها رو به صورت مرتب و پشت سرهم میخواند. اگر اطلاعات نیز مرتب ذخیره شده باشند در نمایش نیز به صورت مرتب نمایش داده خواهند شد و لی اگر در PAge ها به صورت مرتب ذخیره نشده باشند در نمایش اگر ترتیبی برای ان مشخص نکنیم به همان صورت ذخیره شده به ما نمایش داده خواهند شد
موفق باشید
بهزادصادقی
شنبه 24 مهر 1389, 09:00 صبح
سلام.بله.این صحبت شما با صحبت پیشین مقداری تفاوت کرد یا حداقل من اینطوری متوجه شدم.
حرف شما صحیح است و در دستور Select هیچ تضمینی برای مرتب بودن اطلاعات نمی باشد.
من برداشتم از صحبت قبلی شما این بود که شما فرمودید خود جدول هیچ نوع ترتیب خاصی ندارد که من عرض کردم در صورتی که ایندکس نداشته باشد. ولی این گفته شما صحیح است که اگر در Select ما از order by استفاده نکنیم و اگر داده ها به صورت مرتب نباشن هیچ تضمینی وجود نداره که به صورت مرتب به ما نمایش بده.
ولی اگر داده ها مرتب باشن اون موقع اگر order by هم استفاده نکنیم براساس همون ترتیب به ما نمایش داده خواهد شد.
چون اطلاعات از page ها خوانده شده و Page ها به صورت Linked List به هم متصل می باشند و SQL Server این Page ها رو به صورت مرتب و پشت سرهم میخواند. اگر اطلاعات نیز مرتب ذخیره شده باشند در نمایش نیز به صورت مرتب نمایش داده خواهند شد و لی اگر در PAge ها به صورت مرتب ذخیره نشده باشند در نمایش اگر ترتیبی برای ان مشخص نکنیم به همان صورت ذخیره شده به ما نمایش داده خواهند شد
موفق باشید
درسته، حرف اول من اشتباه بود. من منظورم این بود که از لحاظ منطقی جداول در SQL Server ترتیب ندارند. ولی آن طور که نوشتمش این طور خوانده میشود که دارم از دید فیزیکی بهش نگاه می کنم. حق با شماست.
ولی در مورد قسمت دوم حرف شما، من باز هم صحبت خود را تکرار می کنم. در بعضی از select های پیچیده، امکان دارد که ُSQL Server مجبور نباشد از clustered index یک جدول برای رسیدن به نتیجه نهایی خود استفاده کند، که در آن صورت، ترتیب نهایی سطرها دیگر قابل پیش بینی نیست.
mehdis2
چهارشنبه 28 مهر 1389, 21:54 عصر
مرسي ولي مشكل من نميدونم چرا وقتي دي يه جدول كه كليدم تداره درج ميكنم به همون ترتيب درج نميشه اونقدرم مبتدي نيستم كه نديونم با order ميشه مرتبش كرد:خجالت:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.