Ma structure de table est la suivante:Table MySQL avec plus de 10 millions de lignes - comment accélérer la recherche en utilisant des index?
CREATE TABLE SINON EXISTE
commodity_data
(
dataid
bigint (20) non signé NOT AUTO_INCREMENT NULL,
commodity
smallint (6) NOT NULL,
market
smallint (6) NOT NULL,
quantity
flotteur NOT NULL,
price_min
mediumint (9) NOT NULL,
price_max
MEDIUMINT (9) NOT NULL,
price_modal
MEDIUMINT (9) NOT NULL,
date
Date NOT NULL,
horodatagemodified
NOT NULL CURRENT_TIMESTAMP DEFAULT ON UPDATE CURRENT_TIMESTAMP,
clé primaire (dataid
)
) MOTEUR = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 7059415;
Mes SELECTs sur cette table where clauses avec un ou plusieurs des « produits de base », « marché » et « date » recherchés sur.
Mes commandes ORDER seront de price_min, price_max ou price_modal et parfois de la plupart des autres champs.
La table finira par être plus de 10 millions de lignes et continuera à augmenter d'environ 5 à 10 mille par jour.
Mon serveur est actuellement un double VPS 2.4Ghz xeon, 4 Go de RAM.
Le seul index est actuellement dans le champ 'dataid'. J'ai lu que la mise en place d'index peut aider et je pense que cela devrait être sur les produits, le marché et la date, mais je voulais vérifier si c'est juste avant d'aller de l'avant à moins qu'il y ait une meilleure façon de faire. La taille de la table sera d'environ 600 Mo et en croissance.
Les champs «marchandise» et «marché» renvoient à l'ID des marchandises et aux marchés dans d'autres tableaux. Je vais soit LEFT JOIN ou si c'est plus rapide, je vais lire ces tables dans des tableaux en PHP (simples tableaux associatifs à un niveau id => name). Il y a environ 300 produits et 2 000 marchés.
Actuellement, les opérations SELECT prennent trop de temps, et par exemple COUNT requêtes avec une clause WHERE prendra une minute ou plus.
Quand je lance: SELECT * DE commodity_data OÙ marchandises IN (4, 8, 9) ET DATE ENTRE '2010-01-01' ET '2010-12-31' ORDER BY produit ASC, marché ASC, DATE ASC LIMIT 0, 30 Cela prend 25 secondes. Le EXPLIQUER donne les éléments suivants: id: 1 select_type: SIMPLE Table: commodity_data Type : ALL possible_keys: NULL clé: NULL key_len: NULL ref: NULL lignes: 7119981 supplémentaire: Utilisation où; Utilisation de filesort – N9ne
Essayez de créer un index sur les champs de marchandise et de données ... – aleroot