|
Technical Interview Questions
Oracle Interview Questions
MySql
Interview Questions
MsSql Interview Questions
JDBC
Interview Questions
.........More
Soft Skills
Communication Skills
Leadership Skills
.........More
|
|
My SQL Interview Questions and Answers
How MySQL Optimizes DISTINCT ?
DISTINCT is converted to a GROUP BY on all columns,
DISTINCT combined with ORDER BY will in many cases also
need a temporary table.
When combining LIMIT # with DISTINCT, MySQL will stop as
soon as it finds # unique rows.
If you don't use columns from all used tables, MySQL
will stop the scanning of the not used tables as soon as
it has found the first match.
SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
In the case, assuming t1 is used before t2 (check with
EXPLAIN), then MySQL will stop reading from t2 (for that
particular row in t1) when the first row in t2 is found.
How MySQL Optimizes LEFT JOIN and RIGHT JOIN ?
A LEFT JOIN B in MySQL is implemented as follows:
The table B is set to be dependent on table A and all
tables that A is dependent on.
The table A is set to be dependent on all tables (except
B) that are used in the LEFT JOIN condition.
All LEFT JOIN conditions are moved to the WHERE clause.
All standard join optimizations are done, with the
exception that a table is always read after all tables
it is dependent on. If there is a circular dependence
then MySQL will issue an error.
All standard WHERE optimizations are done.
If there is a row in A that matches the WHERE clause,
but there wasn't any row in B that matched the LEFT JOIN
condition, then an extra B row is generated with all
columns set to NULL.
If you use LEFT JOIN to find rows that don't exist in
some table and you have the following test: column_name
IS NULL in the WHERE part, where column_name is a column
that is declared as NOT NULL, then MySQL will stop
searching after more rows (for a particular key
combination) after it has found one row that matches the
LEFT JOIN condition.
RIGHT JOIN is implemented analogously as LEFT JOIN.
The table read order forced by LEFT JOIN and STRAIGHT
JOIN will help the join optimizer (which calculates in
which order tables should be joined) to do its work much
more quickly, as there are fewer table permutations to
check.
Note that the above means that if you do a query of
type:
SELECT * FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN
d (d.key=a.key) WHERE b.key=d.key
MySQL will do a full scan on b as the LEFT JOIN will
force it to be read before d.
The fix in this case is to change the query to:
SELECT * FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN
d (d.key=a.key) WHERE b.key=d.key
How MySQL Optimizes LIMIT ?
In some cases MySQL will handle the query differently
when you are using LIMIT # and not using HAVING:
If you are selecting only a few rows with LIMIT, MySQL
will use indexes in some cases when it normally would
prefer to do a full table scan.
If you use LIMIT # with ORDER BY, MySQL will end the
sorting as soon as it has found the first # lines
instead of sorting the whole table.
When combining LIMIT # with DISTINCT, MySQL will stop as
soon as it finds # unique rows.
In some cases a GROUP BY can be resolved by reading the
key in order (or do a sort on the key) and then
calculate summaries until the key value changes. In this
case LIMIT # will not calculate any unnecessary GROUP
BY's.
As soon as MySQL has sent the first # rows to the
client, it will abort the query.
LIMIT 0 will always quickly return an empty set. This is
useful to check the query and to get the column types of
the result columns.
The size of temporary tables uses the LIMIT # to
calculate how much space is needed to resolve the query.
Page Numbers : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Have a Question ?
post your questions here. It
will be answered as soon as possible.
Check
Job Interview Questions
for more Interview Questions with Answers
|