2016-05-05 13 views
1

MySQL-Neuling.MySQL, erkennen Zeilenwertänderung am sortierten Index

Ich habe eine riesige Datenbank (etwa 33 Millionen Zeilen). Alle X Sekunden wird eine neue Zeile hinzugefügt.

DATE_TIME wird als Primärschlüssel gespeichert. Ein progressiver Index (unsigned int) wird aufgezeichnet. Es wächst nur. Natürlich sind DATE_TIME und INDEX bereits sortiert.

Die vollständige Struktur ist:

DATE_TIME, INDEX, SOME_VAL1, SOME_VAL2 

ich nur die Zeilen, in denen Änderungen INDEX finden müssen. Was ist die schnellste Abfrage, um dies zu erhalten?

+0

Meinst du, dein 'INDEX' enthält Werte wie 1,1,1,2,2,3,4,4 ..? –

+0

Ja. Es kann wiederholt werden und es wächst immer. –

+0

Bitte erklären Sie, was Sie Männer mit "Indexänderungen" –

Antwort

2
select FIRST(date_time), index, FIRST(some_val1), FIRST(some_val2) 
from YOURTABLE 
group by index 
+0

Danke @ Danilo. Mit FIRST habe ich einen Syntax Error sowohl von der Kommandozeile als auch mit HeidiSql. Mit MariaDB wirklich arbeiten. Ohne es funktioniert es perfekt. –

+0

Es sieht so aus, als würde die GROUP BY-Aktion die Geschwindigkeit verlangsamen. Ich erwartete einen "ultraschnellen" Standardbefehl, der einen solchen Fall bewältigen würde. Ist es nicht normal, eine Wertpausenabfrage anzufordern? –

+1

@AlexPoca, 'FIRST' ist kein gültiges Schlüsselwort in MySQL (wahrscheinlich für MS SQL-Server). Es funktioniert ohne [Aggregationsfunktion] (http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html), weil MySQL (oder MariaDB) die erste Zeile für jeden 'INDEX' auswählt . Es kann jedoch nicht garantiert werden, dass sich dieses Verhalten in Zukunft nicht ändert. –

1
select * 
from mytable t 
where t.DATE_TIME = (
    select min(DATE_TIME) 
    from mytable t1 
    where t1.INDEX = t.INDEX 
) 

Oder

select t2.* 
from (
    select min(t1.DATE_TIME) as DATE_TIME 
    from mytable t1 
    group by t1.INDEX 
) t1 
join mytable t2 
    on t2.DATE_TIME = t1.DATE_TIME 

Die zweite Abfrage schneller sein könnte. Sie benötigen einen Index für die Spalte INDEX.

+0

Danke @paul. Ich werde die Geschwindigkeit überprüfen. Leider kann ich keinen Index der Datenbank hinzufügen, um die zweite Lösung zu testen. –

+0

@AlexPoca. Ohne diesen Index wird jede Lösung langsam sein. Im besten Fall müssen Sie die gesamte Tabelle scannen. –

+0

+1 Ja, im Vergleich zu Danilos Lösung ist es tatsächlich langsamer. Es sieht so aus, als müsste ich die Datenbank reorganisieren, um ihre Effizienz zu verbessern. Danke @Paul. –