2016-06-04 10 views
0

Ich habe diese update query:Verständnis ERKLÄREN Spaltenindex zu erstellen, basierend auf

explain UPDATE 
qanda AS ans1 
JOIN qanda AS ans2 ON ans2.related = ans1.related 
JOIN qanda AS ques ON ans2.related = ques.id 
SET ans1.acceptedanswer = IF(ans1.id <> 3, 0, IFNULL(ans1.acceptedanswer, 0)^b'1'), 
ans1.aadate = IF(ans1.id <> 3, ans1.aadate, 4353) 
WHERE ques.author_id = 29 
AND ans2.id = 3 
AND ans2.author_id = 31 
AND (ques.amount IS NULL or ans1.acceptedanswer IS NULL) 

Und hier ist das Ergebnis seiner EXPLAIN:

+------+-------------+-------+-------+---------------------------+---------+---------+-------+------+-------------+ 
| id | select_type | table | type |  possible_keys  | key | key_len | ref | rows | Extra  | 
+------+-------------+-------+-------+---------------------------+---------+---------+-------+------+-------------+ 
| 1 | SIMPLE  | ans2 | const | PRIMARY,author_id,related | PRIMARY | 4  | const | 1 | NULL  | 
| 2 | SIMPLE  | ques | const | PRIMARY,author_id   | PRIMARY | 4  | const | 1 | NULL  | 
| 3 | SIMPLE  | ans1 | ALL | related     | NULL | NULL | NULL | 4 | Using where | 
+------+-------------+-------+-------+---------------------------+---------+---------+-------+------+-------------+ 

Es sollte meinen Tisch nur zu beachten, ist, die 4 Zeilen von Daten.

Gut ist meine Struktur in Ordnung? Oder sollte ich einen solchen Index für eine solche Spalte erstellen?

+3

werfen Sie eine Tonne von Zeilen mit einer Test-DB, die erhebliche Zeilenanzahl hat. Jetzt bist du nicht. Im Moment ist deine Erklärung bedeutungslos. – Drew

Antwort

0

Sie haben beide Fragen und mehrere Antworten in der gleichen Tabelle? Das scheint "falsch" zu sein. Schlagen Sie eine Tabelle für Fragen und eine Tabelle für Antworten vor.

SHOW CREATE TABLE wäre hilfreich.

Denken "composite" Indizes ...

INDEX(author_id, id) (in dieser Reihenfolge) wäre wahrscheinlich nützlich sein.

Ich vermute, dass Ihre JOIN zu ans1 ist falsch (in einem Business-Logik Sinn, nicht in einem SQL-Sinne); prüfen Sie.

+0

Stackoverflow hält auch beide Fragen und Antworten in der gleichen Tabelle. https://data.stackexchange.com/stackoverflow/query/edit/421098 –

+0

Ich denke, dass die SO-Logik ist, dass Fragen und Antworten "identische" Struktur usw. haben, so kann es auch die gleiche Tabelle sein. Vielleicht ist es nicht so "falsch" wie ich angedeutet habe. –

Verwandte Themen