Forse puoi aiutarmi. Ho bisogno di interrogare 3 tabelle al fine di ottenere dati per un titolo finanziario.Una query MySQL semplice che dura per sempre (più di 20 minuti!)
L'idea è di andare alla tabella degli strumenti, trovare l'indice per ogni strumento e quindi portare tutti i prezzi per quello strumento particolare insieme agli indicatori che si trovano su una tabella separata.
Le tabelle stockdata
e indicators
sono entrambe quasi 50.000 record. instruments
appena 30.
Questa è la query che non funziona:
SELECT
indicators.ddate,
instruments.name,
indicators.sma_14,
indicators.sma_5,
stockdata.close
FROM
indicators
INNER JOIN instruments ON (indicators.instrument_id=instruments.id)
INNER JOIN stockdata ON (instruments.name=stockdata.name)
Ecco il risultato
SPIEGARE+----+-------------+-------------+-------+-----------------------------+---------------------+---------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | rows | Extra |
+----+-------------+-------------+-------+-----------------------------+---------------------+---------+------+-------------+
| 1 | SIMPLE | instruments | index | PRIMARY,instruments_index01 | instruments_index01 | 61 | 25 | Using index |
| 1 | SIMPLE | indicators | ref | indicators_index01 | indicators_index01 | 5 | 973 | Using where |
| 1 | SIMPLE | stockdata | ref | stockdata_index01 | stockdata_index01 | 31 | 1499 | Using where |
+----+-------------+-------------+-------+-----------------------------+---------------------+---------+------+-------------+
Apprezzo molto tutto l'aiuto che può fornire!
Questo è lo schema per le parti delle tabelle che sono coinvolti nella mia interrogazione:
TABLE `indicators` (
`id` int AUTO_INCREMENT NOT NULL,<br>
`instrument_id` int,
`date` date,
`sma_5` float(10,3),
`sma_14` float(10,3),
`ema_14` float(10,3),
/* Keys */
PRIMARY KEY (`id`)
)
TABLE `instruments` (
`id` int AUTO_INCREMENT NOT NULL,
`name` char(20),
`country` char(50),
`newsquery` char(100),
/* Keys */
PRIMARY KEY (`id`)
)
TABLE `stockdata` (
`id` int AUTO_INCREMENT NOT NULL,
`name` char(10),
`date` date,
`open` float,
`high` float,
`low` float,
`close` float,
`volume` int,
`adjclose` float,
/* Keys */
PRIMARY KEY (`id`)
)
perché ci sono parentesi intorno alla condizione di join? – Fosco
Quante righe sono in ciascuna delle tabelle interessate? – sgriffinusa
Salve, tabella di dati e indicatori sono entrambi quasi 50.000 record. Strumenti appena 30. – JordanBelf