M
misterbasti
Hallo allerseits!
Ich bin gerade dabei eine MySql Abfrage zu optimieren und habe da ein kleines Problemchen.
Ich habe folgende Abfrage:
Der Explain - Select bringt mir folgendes Ergebnis für die letzte Tabelle (`nu`):
MySql mach in der letzten Tabelle also einen kompletten Tabellenscan,
obwohl mir folgende Abfrage,
die ja eig. gleichwertig zum oberen Join ist, folgendes Ergebnis liefert:
Naja, ist schon eine Weile her, da sind meine MySql Kentnisse ein wenig eingerostet.
Meine Fragen an euch sind nun:
Warum ist das so?
Und wie bekomme ich es jetzt hin,
dass die letzte Tabelle nicht komplett gescannt wird?
Ich hatte schon versucht mit FORCE bzw. USE INDEX das nutzen des Primärschlüssels
zu erzwingen, was aber trotzdem zum selben Ergebnis führte.
Ich freue mich auf eure Antworten.
Ich bin gerade dabei eine MySql Abfrage zu optimieren und habe da ein kleines Problemchen.
Ich habe folgende Abfrage:
SQL:
SELECT
`np`.`id`, `np`.`published`, `np`.`modified`,
`np`.`comments`, `np`.`title`, `np`.`description`,
GROUP_CONCAT(DISTINCT `nc`.`name` SEPARATOR ','),
GROUP_CONCAT(DISTINCT `nu`.`real_name` SEPARATOR ',')
FROM `naitis_posts` AS `np`
INNER JOIN `naitis_relationships` AS `nr`
ON (`nr`.`type` = 1 AND `nr`.`first_object_id` = `np`.`id`)
INNER JOIN `naitis_categories` AS `nc`
ON(`nc`.`id` = `nr`.`second_object_id`)
INNER JOIN `naitis_user` AS `nu`
ON(`nu`.`id` = `np`.`author` OR `nu`.`id` = `np`.`editor`)
WHERE `np`.`status` = 1 AND `np`.`published` <= NOW()
GROUP BY `np`.`id` ORDER BY `np`.`published`, `np`.`modified` DESC LIMIT ?, ?
Der Explain - Select bringt mir folgendes Ergebnis für die letzte Tabelle (`nu`):
Code:
+-------------+-------+------+---------------+------+---------+------+------+
| select_type | table | type | possible_keys | key | key_len | ref | rows |
+-------------+-------+------+---------------+------+---------+------+------+
| SIMPLE | nu | ALL | PRIMARY | NULL | NULL | NULL | 13 |
+-------------+-------+------+---------------+------+---------+------+------+
MySql mach in der letzten Tabelle also einen kompletten Tabellenscan,
obwohl mir folgende Abfrage,
SQL:
SELECT GROUP_CONCAT( `real_name` )
FROM `naitis_user`
WHERE `id` = 1 OR `id` = 2
Code:
+-------------+-------+-------+---------------+---------+---------+------+------+
| select_type | table | type | possible_keys | key | key_len | ref | rows |
+-------------+-------+-------+---------------+---------+---------+------+------+
| SIMPLE | .. | range | PRIMARY | PRIMARY | 3 | NULL | 2 |
+-------------+-------+-------+---------------+---------+---------+------+------+
Naja, ist schon eine Weile her, da sind meine MySql Kentnisse ein wenig eingerostet.

Meine Fragen an euch sind nun:
Warum ist das so?
Und wie bekomme ich es jetzt hin,
dass die letzte Tabelle nicht komplett gescannt wird?
Ich hatte schon versucht mit FORCE bzw. USE INDEX das nutzen des Primärschlüssels
zu erzwingen, was aber trotzdem zum selben Ergebnis führte.
Ich freue mich auf eure Antworten.

Zuletzt bearbeitet von einem Moderator: