ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
563
563
EMPFEHLEN
-
05.02.12 16:22 #1
Hallo allerseits!
Ich bin gerade dabei eine MySql Abfrage zu optimieren und habe da ein kleines Problemchen.
Ich habe folgende Abfrage:
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14
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 :1 2 3 4 5
+-------------+-------+------+---------------+------+---------+------+------+ | 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,
die ja eig. gleichwertig zum oberen Join ist, folgendes Ergebnis liefert:Code sql:1 2 3
SELECT GROUP_CONCAT( `real_name` ) FROM `naitis_user` WHERE `id` = 1 OR `id` = 2
Code :1 2 3 4 5
+-------------+-------+-------+---------------+---------+---------+------+------+ | 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.
"Nicht Tatsachen, sondern Meinungen über Tatsachen bestimmen das Zusammenleben."
-
Wenn ich mich nich irre, machst du ein Group BY auf "np". Kann mich jetzt irren, wäre aber das Group By nicht auf das "nu" zu setzen
Ich bin keine Signatur! - Auch wenn`s so aussieht :) - Wirklich!
Über ein Danke freut sich jeder
-
07.02.12 12:51 #3
Die Gruppierung bezieht sich auf die Id des jeweiligen Beitrages, das ist schon richtig so.

Eine Gruppierung der User würde hier aber keinen Sinn machen.
Aber trotzdem danke.
"Nicht Tatsachen, sondern Meinungen über Tatsachen bestimmen das Zusammenleben."
Ähnliche Themen
-
MySql Abfrage optimieren
Von Thomasio im Forum C/C++Antworten: 8Letzter Beitrag: 13.10.11, 00:08 -
MySQL > 1 zu n Abfrage optimieren
Von newbe im Forum PHPAntworten: 1Letzter Beitrag: 26.10.09, 16:31 -
MySQL-Abfrage optimieren
Von devilzride im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 12.09.06, 23:20 -
MySQL-Abfrage optimieren
Von devilzride im Forum PHPAntworten: 0Letzter Beitrag: 12.09.06, 23:01 -
MySQL Abfrage Optimieren
Von dr_Alex im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 07.03.06, 02:42





Zitieren
Login





