2017-09-18 3 views
0

ich eine Datenbank mit 36.402.933 Datensätze haben, aber wenn ich die folgende einfache Abfrage ausführen,einfache Zählung Abfrage zu viel Zeit auszuführen

select count(user-id) 
from (Table) 
where time>'2006-04-07 22:59:59' 
and time<'2006-04-07 23:59:59 '; 

Es dauert etwa 1 min auszuführen. in Mysql Konsole. gibt es einen besseren Weg, um es schnell auszuführen?

+0

Bitte zeigen Sie das Schema der Tabelle, können wir nach Indizes suchen, und was @tanaydin bemerkte, vielleicht haben Sie Varchar anstelle von Zeit Feld – Pieter21

Antwort

1

Sie können ein Index-auf-Zeit-Feld erstellen, um diese Abfrage schneller zu machen. Aber wenn es Varchar ist (scheint so), wird es immer ein Problem für Sie sein. Konvertieren Sie es in den richtigen DateTime-Typ, und erstellen Sie den Index als beste Lösung.

+0

guten Fang auf dem Varchar! Der Absender sollte das Erstellungsschema der Tabelle – Pieter21

1

Ja, legen Sie einen Index auf das Zeitfeld.

und/oder der Abfrage-Plan überprüfen, ob das einige Vorschläge

+0

danken, Sir. Das war wirklich hilfreich –

1

bringt können Sie ein paar Dinge tun.

1) Sicherzustellen, dass die Zeit

2) Legen Sie eine Begrenzung auf Ihr Ergebnis

SELECT count(`user-id`) 
    FROM (Table) 
    WHERE `time` >'2006-04-07 22:59:59' 
    AND `time` <'2006-04-07 23:59:59 '; 

3) Steigern Sie Ihren Speicher indiziert werden, die von MySQL verwendet wird, Abfragen auszuführen.

+1

Erstellen von Index auf Benutzer-ID in seinem Fall wird keinen Unterschied machen – Ravi

0
SELECT COUNT(user-id) 
FROM (Table) 
WHERE time BETWEEN '2006-04-07 22:59:59' 
AND '2006-04-07 23:59:59'; 

und auch Erstellen eines INDEX der TIME-Feld.