مجيد اطلس باف

Majid Atlasbaf
91 - پیام , 188 - نظر

پیوندهای اصلی

اخبار


Page Rank Tool

بایگانی پیامها

بایگانی سال ۱۳۸۸

فروردین ۱۳۸۸، (۱)

بایگانی سال ۱۳۸۷

دی ۱۳۸۷، (۱)
آذر ۱۳۸۷، (۱)
آبان ۱۳۸۷، (۱)
مهر ۱۳۸۷، (۱)
شهریور ۱۳۸۷، (۱)
مرداد ۱۳۸۷، (۱)
تیر ۱۳۸۷، (۱)
خرداد ۱۳۸۷، (۱)
اردیبهشت ۱۳۸۷، (۱)
فروردین ۱۳۸۷، (۱)

بایگانی سال ۱۳۸۶

اسفند ۱۳۸۶، (۱)
بهمن ۱۳۸۶، (۳)
آذر ۱۳۸۶، (۱)
آبان ۱۳۸۶، (۱)
مهر ۱۳۸۶، (۱)
شهریور ۱۳۸۶، (۱)
مرداد ۱۳۸۶، (۲)
خرداد ۱۳۸۶، (۱)
اردیبهشت ۱۳۸۶، (۱)
فروردین ۱۳۸۶، (۲)

بایگانی سال ۱۳۸۵

اسفند ۱۳۸۵، (۱)
دی ۱۳۸۵، (۱)
آبان ۱۳۸۵، (۲)
مهر ۱۳۸۵، (۲)
شهریور ۱۳۸۵، (۳)
مرداد ۱۳۸۵، (۱)
تیر ۱۳۸۵، (۴)
خرداد ۱۳۸۵، (۱)
اردیبهشت ۱۳۸۵، (۵)
فروردین ۱۳۸۵، (۲)

بایگانی سال ۱۳۸۴

اسفند ۱۳۸۴، (۱)
دی ۱۳۸۴، (۳)
آذر ۱۳۸۴، (۵)
آبان ۱۳۸۴، (۲)
مهر ۱۳۸۴، (۷)
شهریور ۱۳۸۴، (۴)
مرداد ۱۳۸۴، (۳)
خرداد ۱۳۸۴، (۳)
اردیبهشت ۱۳۸۴، (۳)
فروردین ۱۳۸۴، (۵)

بایگانی سال ۱۳۸۳

اسفند ۱۳۸۳، (۴)
بهمن ۱۳۸۳، (۴)

دسته بندی پیامها

(rss) مطالب مرتبط با NET.
(rss) مطالب مرتبط با SQL
(rss) مطالب مرتبط با UNIX

گالری عکسها

عکسهای مقالات

سایت های مرتبط

Persian Websites Directory
DSP algorithms development

همکاران

حمیدرضا طاهریان
شیما دهباشی
فاطمه طاهریان
محسن طاهریان

Too slow nested SELECTs and LEFT JOINs in MySQL, symptoms and remedies

Using nested SELECTs or LEFT JOINs on big tables, can result in slow performance in database queries. Suppose we have two tables: tbl1 with 1500 records with id1 as primary key and tbl2 with 100,000 records with id2 as primary key and fid which the id1 in tbl1 is a foreign key for it. The following diagram shows the situation:

 If you want to run the following queries it takes long to answer (on my 3.0GHz P4 machine with MySQL 4.1, it takes more than 9 minutes to answer!):

SELECT * FROM tbl1 WHERE id1 IN (SELECT fid FROM tbl2)
SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl1.id1 = tbl2.fid

The cause of this problem is that MySQL has to start with the first record and then read through the whole table to find the relevant rows. The larger the table, the more this costs. To solve this problem and get a better performance, it's necessary to define an INDEX on the fid in the second table. You can do this by the following sql command:

ALTER TABLE `tbl2` ADD INDEX `INX_FID` (`fid`)

Indexes are used to find rows with specific column values fast, without defining an index, in both above queries, MySQL has to scan all records in tbl2 so it takes long time to answer these queries.

In general, indexes are used as described in the following discussion:

  • To quickly find the rows that match a WHERE clause.
  • To retrieve rows from other tables when performing joins.
  • To find the MIN() or MAX() value for a specific indexed column.
  • To sort or group a table, if the sorting or grouping is done on a leftmost prefix of a usable key (for example, ORDER BY key_part1, key_part2). If all key parts are followed by DESC, the key is read in reverse order.

The above scenario exists for all databases not only for MySQL merely, so in general, indexes should be considered on all columns that are frequently queried or accessed by the WHERE, ORDER BY, GROUP BY, TOP, and DISTINCT clauses. Without an index, each of these operations will require a table scan of your table, potentially hurting performance.

To learn more about indexes visit the following pages:

ارسال شده در تاریخ ۲۲ خرداد ۱۳۸۶ - 5:58 عصر

نظرات

# پاسخ به: Too slow nested SELECTs and LEFT JOINs in MySQL, symptoms and remedies   

مطالب کاملتری در باره sql
۲ دی ۱۳۸۶ - 3:45 عصر | adib

ارسال نظرات

عنوان:  
نام:  
آدرس الکترونیکی:
زبان:
توضیح:  
لطفا متن مقابل را در زیر وارد کنید
(کوچک یا بزرگ بودن حروف مهم نیست)