USE/FORCE INDEX
4 отговора
0 прегледа
USE/FORCE INDEX
Здравейте!
Имам два въпроса, свързани с USE/FORCE INDEX в MySQL.
Първо, каква е разликата между това дали ще е USE или FORCE (да, зная, че самите думи предполагат как ще се използва индекса), тъй като в реална ситуация не видях разлика.
И другото (съжалявам ако въпроса е ламерски), но защо в дадени ситуации при липса на USE/FORCE INDEX MySQL-a връща резултат, а при наличието му - не?
Рових подробно в mysql.com и mysqlperformanceblog.com на г-н Peter Zaitsev (изключително съдържателен блог между другото), но не успях да намеря отговори на въпросите си...
Предварително благодаря!
Имам два въпроса, свързани с USE/FORCE INDEX в MySQL.
Първо, каква е разликата между това дали ще е USE или FORCE (да, зная, че самите думи предполагат как ще се използва индекса), тъй като в реална ситуация не видях разлика.
И другото (съжалявам ако въпроса е ламерски), но защо в дадени ситуации при липса на USE/FORCE INDEX MySQL-a връща резултат, а при наличието му - не?
Рових подробно в mysql.com и mysqlperformanceblog.com на г-н Peter Zaitsev (изключително съдържателен блог между другото), но не успях да намеря отговори на въпросите си...
Предварително благодаря!
Редактирано от mr.vain на
Re: USE/FORCE INDEX
USE INDEX е "препоръка" с която оптимизатора може и да не се съобрази а FORCE INDEX е "заповед"
Нормално е ефектът да е еднакъв.
"защо в дадени ситуации при липса на USE/FORCE INDEX MySQL-a връща резултат, а при наличието му - не? "
Дай пример! Това или е някакъв много странен бъг или е повреден индекс.
salle.online.bg/sig
Нормално е ефектът да е еднакъв.
"защо в дадени ситуации при липса на USE/FORCE INDEX MySQL-a връща резултат, а при наличието му - не? "
Дай пример! Това или е някакъв много странен бъг или е повреден индекс.
salle.online.bg/sig
Re: USE/FORCE INDEX
Ето пример:
SELECT
th.themeID,
th.themeNameEN,
ht.handlingID,
ht.handlingNameEN,
DATE(m.updated) AS updated,
COUNT(*) AS mainCount
FROM
v8_main AS m
INNER JOIN v8_themes AS th ON m.themeID = th.themeID
INNER JOIN v8_handling_types AS ht ON m.handlingID = ht.handlingID
WHERE
m.segmentID IN (4,5,6,1,3)
AND m.ph1008 IN (2,1,5,10,3,7,6,11,12,9,8,4)
AND m.handlingID IN (2,19,17,3,20,1,18,7,12,14,9,4,15,10,11,8,5)
AND DATE(m.updated) BETWEEN '2007-07-01' AND '2007-08-01'
GROUP BY
th.themeID,
ht.handlingID
ORDER BY
th.themeID,
ht.handlingNameEN;
# Query_time: 37 Lock_time: 0 Rows_sent: 71 Rows_examined: 1521661
---------------------------
SELECT
th.themeID,
th.themeNameEN,
ht.handlingID,
ht.handlingNameEN,
DATE(m.updated) AS updated,
COUNT(*) AS mainCount
FROM
v8_main AS m FORCE INDEX(monthStat_IDX)
INNER JOIN v8_themes AS th ON m.themeID = th.themeID
INNER JOIN v8_handling_types AS ht ON m.handlingID = ht.handlingID
WHERE
m.segmentID IN (4,5,6,1,3)
AND m.ph1008 IN (2,1,5,10,3,7,6,11,12,9,8,4)
AND m.handlingID IN (2,19,17,3,20,1,18,7,12,14,9,4,15,10,11,8,5)
AND DATE(m.updated) BETWEEN '2007-07-01' AND '2007-08-01'
GROUP BY
th.themeID,
ht.handlingID
ORDER BY
th.themeID,
ht.handlingNameEN;
# Query_time: 22 Lock_time: 0 Rows_sent: 0 Rows_examined: 1673826
monthStat индекса е на полетата `ph1008`, `handlingID`
Има три вида хора. Част от проблема, част от решението и част от пейзажа.
SELECT
th.themeID,
th.themeNameEN,
ht.handlingID,
ht.handlingNameEN,
DATE(m.updated) AS updated,
COUNT(*) AS mainCount
FROM
v8_main AS m
INNER JOIN v8_themes AS th ON m.themeID = th.themeID
INNER JOIN v8_handling_types AS ht ON m.handlingID = ht.handlingID
WHERE
m.segmentID IN (4,5,6,1,3)
AND m.ph1008 IN (2,1,5,10,3,7,6,11,12,9,8,4)
AND m.handlingID IN (2,19,17,3,20,1,18,7,12,14,9,4,15,10,11,8,5)
AND DATE(m.updated) BETWEEN '2007-07-01' AND '2007-08-01'
GROUP BY
th.themeID,
ht.handlingID
ORDER BY
th.themeID,
ht.handlingNameEN;
# Query_time: 37 Lock_time: 0 Rows_sent: 71 Rows_examined: 1521661
---------------------------
SELECT
th.themeID,
th.themeNameEN,
ht.handlingID,
ht.handlingNameEN,
DATE(m.updated) AS updated,
COUNT(*) AS mainCount
FROM
v8_main AS m FORCE INDEX(monthStat_IDX)
INNER JOIN v8_themes AS th ON m.themeID = th.themeID
INNER JOIN v8_handling_types AS ht ON m.handlingID = ht.handlingID
WHERE
m.segmentID IN (4,5,6,1,3)
AND m.ph1008 IN (2,1,5,10,3,7,6,11,12,9,8,4)
AND m.handlingID IN (2,19,17,3,20,1,18,7,12,14,9,4,15,10,11,8,5)
AND DATE(m.updated) BETWEEN '2007-07-01' AND '2007-08-01'
GROUP BY
th.themeID,
ht.handlingID
ORDER BY
th.themeID,
ht.handlingNameEN;
# Query_time: 22 Lock_time: 0 Rows_sent: 0 Rows_examined: 1673826
monthStat индекса е на полетата `ph1008`, `handlingID`
Има три вида хора. Част от проблема, част от решението и част от пейзажа.
Редактирано от mr.vain на
Re: USE/FORCE INDEX
няма ли да пуснеш дефиниране на индекси по таблиците, че така да гадаем е [цунзурирано]
Re: USE/FORCE INDEX
mysql> show index from v8_main;
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| v8_main | 0 | PRIMARY | 1 | id | A | 1675502 | NULL | NULL | | BTREE | |
| v8_main | 1 | empID_IDX | 1 | empID | A | 341 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | msisdn_IDX | 1 | msisdn | A | 837751 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | themeID_IDX | 1 | themeID | A | 167550 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | themeID_IDX | 2 | handlingID | A | 167550 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | monthStat_IDX | 1 | ph1008 | A | 13 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | monthStat_IDX | 2 | handlingID | A | 121 | NULL | NULL | YES | BTREE | |
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
7 rows in set
mysql> show index from v8_themes
;
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| v8_themes | 0 | PRIMARY | 1 | themeID | A | 232 | NULL | NULL | | BTREE | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
1 row in set
mysql> show index from v8_handling_types
;
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| v8_handling_types | 0 | PRIMARY | 1 | handlingID | A | 17 | NULL | NULL | | BTREE | |
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
1 row in set
Има три вида хора. Част от проблема, част от решението и част от пейзажа.
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| v8_main | 0 | PRIMARY | 1 | id | A | 1675502 | NULL | NULL | | BTREE | |
| v8_main | 1 | empID_IDX | 1 | empID | A | 341 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | msisdn_IDX | 1 | msisdn | A | 837751 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | themeID_IDX | 1 | themeID | A | 167550 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | themeID_IDX | 2 | handlingID | A | 167550 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | monthStat_IDX | 1 | ph1008 | A | 13 | NULL | NULL | YES | BTREE | |
| v8_main | 1 | monthStat_IDX | 2 | handlingID | A | 121 | NULL | NULL | YES | BTREE | |
+---------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
7 rows in set
mysql> show index from v8_themes
;
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| v8_themes | 0 | PRIMARY | 1 | themeID | A | 232 | NULL | NULL | | BTREE | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
1 row in set
mysql> show index from v8_handling_types
;
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| v8_handling_types | 0 | PRIMARY | 1 | handlingID | A | 17 | NULL | NULL | | BTREE | |
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
1 row in set
Има три вида хора. Част от проблема, част от решението и част от пейзажа.