تصویر توسط نویسنده
در سطح مبتدی، ما فقط بر روی نوشتن و اجرای پرس و جوهای SQL تمرکز می کنیم. ما در مورد اینکه اجرای آن چقدر زمان می برد یا اینکه می تواند میلیون ها رکورد را مدیریت کند، کاری نداریم. اما در سطح متوسط، مردم انتظار دارند که پرس و جو شما بهینه شود و حداقل زمان برای اجرا نیاز دارد.
نوشتن یک پرس و جو بهینه شده در برنامه های کاربردی بزرگ با میلیون ها رکورد، مانند پلت فرم های تجارت الکترونیک یا سیستم های بانکی، ضروری است. فرض کنید صاحب یک شرکت تجارت الکترونیک با بیش از یک میلیون محصول هستید و مشتری می خواهد محصولی را جستجو کند. اگر درخواستی که در باطن نوشتید بیش از یک دقیقه طول بکشد تا آن محصول از پایگاه داده واکشی شود چه؟ آیا فکر می کنید مشتریان محصولاتی را از وب سایت شما خریداری می کنند؟
شما باید اهمیت بهینه سازی پرس و جوی SQL را درک کنید. در این آموزش، نکات و ترفندهایی را به شما نشان خواهم داد تا پرس و جوهای SQL خود را بهینه کنید و آنها را سریعتر اجرا کنید. پیش نیاز اولیه این است که شما باید دانش اولیه SQL را داشته باشید.
برای بررسی اینکه آیا عنصر خاصی در جدول وجود دارد یا خیر، از عبارت استفاده کنید EXIST()
کلمه کلیدی به جای COUNT()
پرس و جو را به روشی بهینه تر اجرا می کند.
با استفاده از COUNT()
، پرس و جو نیاز به شمارش تمام رخدادهای آن عنصر خاص دارد که ممکن است زمانی که پایگاه داده گسترده است ناکارآمد باشد. از سوی دیگر، EXIST()
فقط اولین رخداد آن عنصر را بررسی می کند و پس از یافتن اولین رخداد متوقف می شود. این باعث صرفه جویی در زمان زیادی می شود.
همچنین، شما فقط علاقه مند به یافتن وجود یا عدم وجود یک عنصر خاص هستید. شما علاقه ای به یافتن تعداد رخدادها ندارید. به همین دلیل نیز EXIST()
بهتر است.
SELECT EXISTS( SELECT * FROM table WHERE myColumn = 'val' );
پرس و جوی بالا بازخواهد گشت 1 اگر حداقل یک ردیف جدول حاوی ورودی باشد که در آن ستونی به نام myColumn
دارای مقدار برابر است وال. در غیر این صورت باز خواهد گشت 0.
هر دو char
و varchar
از انواع داده ها برای ذخیره رشته های کاراکتر در جدول استفاده می شود. ولی varchar
بسیار کارآمدتر از حافظه است char
.
نوع داده char فقط می تواند رشته کاراکتری با طول ثابت تعریف شده را ذخیره کند. اگر طول رشته کمتر از طول ثابت باشد، آنگاه فضاهای خالی را ضمیمه می کند تا طول آن برابر با طول تنظیم شده باشد. این باعث هدر رفتن بی مورد حافظه در padding می شود. مثلا،CHAR(100)
حتی اگر یک کاراکتر ذخیره شود، 100 بایت از حافظه می گیرد.
از طرف دیگر، نوع داده varchar رشته کاراکتری با طول متغیر را با طول کمتر از حداکثر طول مشخص شده ذخیره می کند. فضاهای خالی را خالی نمی کند و فقط حافظه را برابر با طول واقعی رشته می گیرد. مثلا، VARCHAR(100)
هنگام ذخیره یک کاراکتر تنها 1 بایت حافظه می گیرد.
CREATE TABLE myTable ( id INT PRIMARY KEY, charCol CHAR(10), varcharCol VARCHAR(10)
);
در مثال بالا، یک جدول myTable
با دو ستون ایجاد می شود، charCol
و varcharCol
دارای انواع داده char و varchar به ترتیب. charCol
همیشه 10 بایت حافظه می گیرد. متقابلا، varcharCol
حافظه را برابر با اندازه واقعی رشته کاراکتر ذخیره شده در آن می گیرد.
ما باید از استفاده از پرس و جوهای فرعی در داخل عبارت WHERE برای بهینه سازی پرس و جوی SQL اجتناب کنیم. از آنجایی که پرسوجوهای فرعی زمانی که تعداد زیادی ردیف را برمیگردانند میتوانند گران و دشوار باشند.
به جای استفاده از پرس و جوی فرعی، می توانید با استفاده از عملیات پیوستن یا نوشتن یک زیرپرسوجوی همبسته، به همان نتیجه برسید. پرسش فرعی همبسته، پرسش فرعی است که در آن پرس و جو درونی به پرس و جوی بیرونی بستگی دارد. و در مقایسه با پرس و جوهای فرعی غیر همبسته بسیار کارآمد هستند.
در زیر یک مثال برای درک تفاوت بین این دو آورده شده است.
# Using a subquery
SELECT * FROM orders WHERE customer_id IN ( SELECT id FROM customers WHERE country = 'INDIA' ); # Using a join operation
SELECT orders.* FROM orders JOIN customers ON orders.customer_id = customers.id WHERE customers.country = 'INDIA';
در مثال اول، پرس و جوی فرعی ابتدا تمام شناسه های مشتری را که به هند تعلق دارند جمع آوری می کند و سپس کوئری بیرونی تمام سفارشات شناسه های مشتری انتخاب شده را دریافت می کند. و در مثال دوم با پیوستن به به همین نتیجه رسیده ایم customers
و orders
جداول و سپس انتخاب فقط سفارشاتی که مشتریان از هند تعلق دارند.
به این ترتیب، میتوانیم با اجتناب از استفاده از زیرپرس و جوهای درون عبارت WHERE و آسانتر کردن خواندن و درک آنها، کوئری را بهینه کنیم.
درخواست JOIN
عملیات از یک جدول بزرگتر به یک جدول کوچکتر یک تکنیک رایج بهینه سازی SQL است. زیرا پیوستن از یک جدول بزرگتر به یک جدول کوچکتر باعث می شود درخواست شما سریعتر اجرا شود. اگر الف را اعمال کنیم JOIN
عملیات از یک جدول کوچکتر به یک جدول بزرگتر، موتور SQL ما باید در یک جدول بزرگتر برای ردیف های مطابقت جستجو کند. این کار بیشتر منابع فشرده و زمان بر است. اما از سوی دیگر، اگر JOIN
از یک جدول بزرگتر به یک جدول کوچکتر اعمال می شود، سپس موتور SQL باید در یک جدول کوچکتر برای ردیف های مطابقت جستجو کند.
در اینجا یک مثال برای درک بهتر شما آورده شده است.
# Order table is larger than the Customer table # Join from a larger table to a smaller table
SELECT * FROM Order JOIN Customer ON Customer.id = Order.id # Join from a smaller table to a larger table
SELECT * FROM Customer JOIN Order ON Customer.id = Order.id
بر خلاف LIKE
عبارت، regexp_like
همچنین برای جستجوی الگو استفاده می شود. را LIKE
clause یک عملگر اصلی تطبیق الگو است که فقط می تواند عملیات اساسی مانند انجام دهد _ or %، که به ترتیب برای مطابقت با یک کاراکتر یا هر تعداد کاراکتر استفاده می شوند. را LIKE
بند باید پایگاه داده کامل را اسکن کند تا الگوی خاص را پیدا کند که برای جداول بزرگ کند است.
از سوی دیگر، regexp_like
یک تکنیک جستجوی الگوی کارآمدتر، بهینه تر و قدرتمندتر است. از عبارات منظم پیچیده تری برای یافتن الگوهای خاص در یک رشته کاراکتر استفاده می کند. این عبارات منظم نسبت به تطبیق ساده عبارات خاص تر هستند زیرا به شما امکان می دهند الگوی دقیقی را که ما پیدا می کنیم جستجو کنید. به همین دلیل، حجم داده هایی که باید جستجو شوند کاهش می یابد و کوئری سریعتر اجرا می شود.
لطفا توجه داشته باشید که regexp_like
ممکن است در همه سیستم های مدیریت پایگاه داده وجود نداشته باشد. نحو و عملکرد آن ممکن است در سیستم های دیگر متفاوت باشد.
در اینجا یک مثال برای درک بهتر شما آورده شده است.
# Query using the LIKE clause
SELECT * FROM mytable WHERE ( name LIKE 'A%' OR name LIKE 'B%' ); # Query using regexp_like clause
SELECT * FROM mytable WHERE regexp_like(name, '^[AB].*');
پرس و جوهای بالا برای یافتن عناصری که نام آنها با A یا B شروع می شود استفاده می شود. در مثال اول، LIKE
برای جستجوی تمام نام هایی که با A یا B شروع می شوند استفاده می شود. A%
به این معنی است که کاراکتر اول A است. پس از آن، هر تعداد کاراکتر می تواند وجود داشته باشد. در مثال دوم، regexp_like
استفاده می شود. داخل ^[AB]
, ^
نشان می دهد که نماد در ابتدای رشته مطابقت دارد، [AB]
نشان می دهد که کاراکتر آغازین می تواند A یا B باشد و .*
نشان دهنده تمام شخصیت های بعد از آن است.
با استفاده از regexp_like
، پایگاه داده می تواند به سرعت ردیف هایی را که با الگو مطابقت ندارند فیلتر کند و عملکرد را بهبود بخشد و استفاده از منابع را کاهش دهد.
در این مقاله روش ها و نکات مختلفی را برای بهینه سازی پرس و جو SQL مورد بحث قرار داده ایم. این مقاله به شما درک روشنی از نحوه نوشتن پرس و جوهای SQL کارآمد و اهمیت بهینه سازی آنها می دهد. راههای زیادی برای بهینهسازی کوئریها وجود دارد، مانند ترجیح استفاده از مقادیر صحیح به جای کاراکترها یا استفاده از Union All به جای Union زمانی که جدول شما حاوی موارد تکراری نیست و غیره.
آریایی گرگ B.Tech است. دانشجوی مهندسی برق، در حال حاضر در سال آخر کارشناسی. علاقه او در زمینه توسعه وب و یادگیری ماشین است. او این علاقه را دنبال کرده و مشتاق است در این مسیرها بیشتر کار کند.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- پلاتوبلاک چین. Web3 Metaverse Intelligence. دانش تقویت شده دسترسی به اینجا.
- منبع: https://www.kdnuggets.com/2023/03/sql-query-optimization-techniques.html?utm_source=rss&utm_medium=rss&utm_campaign=sql-query-optimization-techniques
- 1
- 10
- 100
- 7
- 9
- a
- درباره ما
- بالاتر
- دست
- پس از
- معرفی
- همیشه
- مقدار
- و
- برنامه های کاربردی
- اعمال می شود
- درخواست
- مقاله
- اجتناب از
- بخش مدیریت
- بانکداری
- سیستم های بانکی
- اساسی
- زیرا
- مبتدی
- شروع
- بهتر
- میان
- سفید
- خرید
- می توانید دریافت کنید
- شخصیت
- کاراکتر
- بررسی
- واضح
- جمع می کند
- ستون
- ستون ها
- مشترک
- شرکت
- مقایسه
- کامل
- پیچیده
- شامل
- کنتراست
- کشور
- ایجاد شده
- در حال حاضر
- مشتری
- مشتریان
- داده ها
- پایگاه داده
- مشخص
- بستگی دارد
- پروژه
- تفاوت
- مشکل
- بحث کردیم
- نمی کند
- آیا
- نسخه های تکراری
- تجارت الکترونیک
- سیستم عامل های تجارت الکترونیکی
- آسان تر
- موثر
- مهندسی برق
- عناصر
- موتور
- مهندسی
- ورود
- و غیره
- حتی
- مثال
- اجرا کردن
- اجرا می کند
- انتظار
- گران
- اصطلاحات
- وسیع
- سریعتر
- رشته
- فیلتر
- نهایی
- پیدا کردن
- پیدا کردن
- پیدا می کند
- نام خانوادگی
- ثابت
- تمرکز
- از جانب
- قابلیت
- دریافت کنید
- می دهد
- دست
- دسته
- داشتن
- چگونه
- چگونه
- HTTPS
- امری ضروری
- اهمیت
- بهبود
- in
- در دیگر
- هندوستان
- ناکارآمد
- در عوض
- علاقه
- علاقه مند
- حد واسط
- IT
- پیوستن
- پیوستن
- kdnuggets
- کلید
- دانش
- بزرگ
- بزرگتر
- یادگیری
- طول
- سطح
- لینک
- خیلی
- دستگاه
- فراگیری ماشین
- ساخت
- ساخت
- مدیریت
- بسیاری
- مسابقه
- مطابق
- بیشترین
- به معنی
- حافظه
- روش
- میلیون
- میلیون ها نفر
- حد اقل
- دقیقه
- بیش
- کارآمدتر
- نام
- تحت عنوان
- نام
- نیازهای
- عدد
- ONE
- عمل
- عملیات
- اپراتور
- بهینه سازی
- بهینه سازی
- بهینه
- بهینه سازی
- سفارش
- سفارشات
- دیگر
- در غیر این صورت
- خود
- لایی
- ویژه
- الگو
- الگوهای
- مردم
- انجام دادن
- کارایی
- سیستم عامل
- افلاطون
- هوش داده افلاطون
- PlatoData
- قوی
- در حال حاضر
- اصلی
- محصول
- محصولات
- به سرعت
- خواندن
- سوابق
- کاهش
- کاهش
- منظم
- نشان دهنده
- منابع
- منابع فشرده
- به ترتیب
- نتیجه
- برگشت
- ROW
- دویدن
- در حال اجرا
- همان
- اسکن
- جستجو
- جستجو
- دوم
- انتخاب شد
- انتخاب
- تنظیم
- نشان
- ساده
- تنها
- اندازه
- کند
- کوچکتر
- برخی از
- فضاها
- خاص
- مشخص شده
- SQL
- شروع
- شروع می شود
- توقف
- opbevare
- ذخیره شده
- پرده
- دانشجو
- نماد
- نحو
- سیستم های
- جدول
- گرفتن
- طول می کشد
- فن آوری
- تکنیک
- La
- زمان
- زمان بر
- نکات
- نکات و ترفندها
- به
- آموزش
- انواع
- فهمیدن
- درک
- اتحادیه
- بدون نیاز
- استفاده
- استفاده کنید
- VAL
- ارزش
- ارزشها
- مختلف
- ضایعات
- راه
- وب
- توسعه وب
- سایت اینترنتی
- چی
- چه
- که
- اراده
- مهاجرت کاری
- نوشتن
- نوشته
- سال
- شما
- زفیرنت