2016-05-12 12 views
1

Ich muss die gleichen Abfragen mit und ohne Indizes in mysql ausführen. Ich schaffe Indizes wie folgt aus:Ausführen von Abfragen mit und ohne Indizes in mysql

create index index_1 on table_1(column_name); 
create index index_2 on table_2(column_name); 

führe ich dieses und ich bekomme die Ergebnisse, dass 0 Zeilen betroffen, beide Male. Ist das ok?

Denn wenn ich die Abfragen ausführen Ich habe (nachdem ich Indizes erstellt), es mir zur gleichen Zeit wie vor nimmt

Die Ansicht der Datenbank (ohne Indizes.): click here for the image

Ich habe mehr kleine Rückfragen zu dieser Datenbank, zB

SELECT DISTINCT customers.customer_id, customers.customer_name 
FROM customers 
    INNER JOIN accounts ON customers.customer_id = accounts.customer_id 
    INNER JOIN transactions ON transactions.account_id = accounts.account_id 
WHERE transactions.trn_date >= '2011/05/01' 
    AND transactions.trn_date <= '2011/05/31' 
ORDER BY customers.customer_id 
+0

Zu wenig Info. Wir brauchen Tabellendefinitionen, Abfragen usw. – jarlh

+1

Und die Indizes sind? – jarlh

+0

Wir müssen nach eigenem Ermessen 2 Indizes in den Basistabellen erstellen, um die Ausführungszeit der Abfragen zu reduzieren und trotzdem die Ladezeit der neuen Daten leicht zu erhöhen. – Thodoris

Antwort

2

Sie müssen diese Indizes für diese Abfrage:

transactions: INDEX(trn_date) 
accounts:  INDEX(account_id) 
customers: INDEX(customer_id) 

In den letzten beiden Fällen haben Sie wahrscheinlich bereits die Spalte als PRIMARY KEY. Wenn ja, fügen Sie keine redundante INDEX hinzu.

1

ich dies ausführen, und ich bekomme die Ergebnisse, dass 0 Zeilen betroffen, die beide t Ime. Ist das ok?

Ja, es ist in Ordnung.
Es gibt DDL-Operation, die neues Objekt erstellen und nicht etwas ausgeben sollten. Da

, wenn ich die Abfragen ausführen Ich habe (nachdem ich Indizes erstellt) es nimmt mir die gleiche Zeit wie zuvor (ohne Indizes)

Die Abfragen sind nicht Index zu verwenden. Der interne Optimierer trifft eine Entscheidung in Abhängigkeit von der Datenverteilung. Wenn zum Beispiel column_name.table_1 50 eindeutige Werte hat, wird der Index nicht verwendet.

Mehr Details ou in offiziellen Dokumenten finden kann: 9.3.1 How MySQL Uses Indexes

+0

Wir müssen nach eigenem Ermessen 2 Indizes erstellen, auf den Basistabellen, um die Ausführungszeit der Abfragen zu reduzieren und noch die Ladezeit der neuen Daten leicht zu erhöhen @ Pavel Zimogorov – Thodoris

+0

Sie sollten die Vorteile von Indizes für die Verbesserung von Select-Abfragen berechnen und Degradation einfügen. Wenn Sie intensive Daten laden, würde ich empfehlen, separate Tabelle zum Abrufen von Daten (TRN_SELECT) zu erstellen. Und verwenden Sie TRN nur zum Einfügen von Daten und zum Auswählen von Zeilen zum Auffüllen von TRN_SELECT –