CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(MySQL) Optimiser une requête

Etoiles
Etoiles
Niveau 7
05 septembre 2010 à 18:01:59

Coucou

j'utilise une BDD avec plus de 1 million d'enregistrements...

SELECT * FROM tables WHERE ID='$id'

et je voudrais juste analyser les 100 000 derniers (plus récents) et pas les 1 million....

Comment faire ? merci

Bunyan
Bunyan
Niveau 17
05 septembre 2010 à 18:19:43

Je ne peux pas t'aider pour ce que tu veux, mais la première chose déjà est de virer * si tu n'utilises pas toujours tout les champs.
Ca fait du boulot totalement inutile et le gain est notable.

Etoiles
Etoiles
Niveau 7
05 septembre 2010 à 18:24:46

Justement j'utilise tous les champs ^^

anothercodeds
anothercodeds
Niveau 9
05 septembre 2010 à 18:33:52

SELECT * FROM tables WHERE ID='$id' LIMIT 0,100000

:question:

Etoiles
Etoiles
Niveau 7
05 septembre 2010 à 18:41:05

ça va regarder dans les 100 000 premiers :-(

Moi j'aimerai un LIMIT
(nombre_total_d'enregistrement)-100000,(nombre_tot
al_d'enregistrement)

anothercodeds
anothercodeds
Niveau 9
05 septembre 2010 à 18:48:33

ah ok.

Est-ce qu'il faudrait pas un ORDER BY noDuMessage DESC

Etoiles
Etoiles
Niveau 7
05 septembre 2010 à 18:52:40

non ça va juste mettre les résultats à partir du plus récents :-(

Bunyan
Bunyan
Niveau 17
05 septembre 2010 à 18:58:16

Le LIMIT fera tout le traitement, puis affichera ensuite le nombre indiqué. Ce bidule ne concerne que de l'affichage, pas du traitement.

Etoiles
Etoiles
Niveau 7
05 septembre 2010 à 19:00:00

mince :snif:

_skip
_skip
Niveau 10
06 septembre 2010 à 20:02:48

Il te faut un ORDER BY 'xxx' DESC où 'xxx' est la colonne qui te sert à trier tes enregistrements, ça peut être une date, un no, peu importe.

Ensuite, LIMIT peut optimiser la requête si la colonne 'xxx' est un index, contrairement à ce qui a été dit plus haut.

Bunyan
Bunyan
Niveau 17
06 septembre 2010 à 21:02:43

Si j'ai donné une fausse info, je m'excuse.
J'avais pourtant lu quelques docs sur le LIMIT avant, histoire de m'assurer x)

_skip
_skip
Niveau 10
07 septembre 2010 à 09:09:50

Ca dépend tout de l'utilisation des index. Si aucun index n'existe sur la colonne de tri, c'est clair que tous les enregistrements qui correspondent aux conditions devront être isolés dans un premier temps, puis finalement triés et enfin sur le jeu de donnée trié, on ne retournera que les X premier.

Et l'ordre peut être différent suivant les statistiques des colonnes concernées et le nombre d'enregistrement. Pour les petites tables, il est possible que le moteur choisisse systématiquement de parcourir la table en brute force plutôt que de passer par un index qui provoque plein d'indirections et multiplie les I/O.

Pour avoir le coeur net, il faut un nombre d'enregistrement assez conséquent et observer les plans d'exécution et tester avec différents index.

Bunyan
Bunyan
Niveau 17
07 septembre 2010 à 11:30:17

Merci des infos en tout cas =D

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment