2017-02-22 1 views
1

Je suis déjà en mesure d'obtenir la dernière ligne du tableau des séries chronologiques que:Obtenir la dernière rangée du tableau des séries chronologiques?

SELECT * from myapp.locations WHERE organization_id=1 and user_id=15 and date='2017-2-22' ORDER BY unix_time DESC LIMIT 1; 

Cela fonctionne très bien, cependant, je me demande sur la performance et les frais généraux d'exécution ORDER BY sous forme de lignes sont déjà triés, je viens d'utiliser pour obtenir la dernière rangée, est-ce un surcoût dans mon cas? Si je n'utilise pas , j'obtiendrai toujours la première ligne de la table, donc, je pourrais utiliser INSERT d'une autre manière, ex: insérer toujours au début au lieu de la fin de la table ?

Un conseil? dois-je utiliser ORDER BY sans se soucier de la performance?

+0

nous montrer votre schéma de table –

+0

ici: https://gist.github.com/hopewise/04f0310629151408f9f019e8d4046546 – simo

Répondre

1

simplement définir votre regroupement clé pour

DESC

Comme le schéma ci-dessous:

CREATE TABLE locations (
    organization_id int, 
    user_id int, 
    date text, 
    unix_time bigint, 
    lat double, 
    long double, 
    PRIMARY KEY ((organization_id, user_id, date), unix_time) 
) WITH CLUSTERING ORDER BY (unix_time DESC); 

Donc, par défaut vos données triées par unix_time desc, vous n'avez pas besoin de préciser dans la requête
maintenant, vous pouvez simplement utiliser la requête ci-dessous pour obtenir la dernière ligne:

SELECT * from myapp.locations WHERE organization_id = 1 and user_id = 15 and date = '2017-2-22' LIMIT 1; 
1

Si votre schéma de requête pour cette table est toujours ORDER BY unix_time DESC alors vous êtes dans un scénario inverse de série chronologique, et je peux dire que votre modèle est inexact (pas faux).

Il n'y a aucune raison de ne pas trier les enregistrements dans l'ordre inverse en ajoutant un WITH CLUSTERING ORDER BY unix_time DESC dans la définition de la table, et à mon avis, le ORDER BY unix_time DESC fonctionnera au maximum avec quelque chose explicitement destiné à ces cas d'utilisation (enfin, je pense va fonctionner pire).

+0

Eh bien, je pense qu'il interprétera worse' voulez-vous dire que 'AVEC COMMANDE PAR REGROUPEMENT desc' unix_time aura mauvais impact sur la performance? – simo

+0

@simo: non, je voulais dire qu'une requête avec 'ORDER BY unix_time DESC' sera pire qu'une table avec' WITH CLUSTERING ORDER BY unix_time DESC'. Intentionnellement. – xmas79

+0

ah, merci! je l'ai – simo