ciao gente, ne sapete qualcosa di mysql?

copincollo dall'ubuntu forum:


MAD02F
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| MDMAT2 | char(18)      | NO   | PRI | NULL    |       |
| MDMAG2 | char(4)       | NO   | PRI | NULL    |       |
| MDGIA2 | decimal(13,3) | NO   |     | NULL    |       |
| MDUBI2 | char(10)      | NO   |     | NULL    |       |
| MDFIX2 | char(1)       | NO   |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+

MAT09F
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| MATNR9 | char(18) | NO   | PRI | NULL    |       |
| SLOCN9 | char(4)  | NO   | PRI | NULL    |       |
+--------+----------+------+-----+---------+-------+

EXPLAIN SELECT MDMAT2, MDMAG2 FROM MAD02F LEFT JOIN MAT09F ON MDMAT2=MATNR9 AND MDMAG2=SLOCN9 WHERE MATNR9 IS NULL;

+----+-------------+--------+-------+-----------------------+--------+---------+------+--------+--------------------------------------+
| id | select_type | table  | type  | possible_keys         | key    | key_len | ref  | rows   | Extra                                |
+----+-------------+--------+-------+-----------------------+--------+---------+------+--------+--------------------------------------+
|  1 | SIMPLE      | MAD02F | index | NULL                  | MDMAG2 | 12      | NULL | 265714 | Using index                          |
|  1 | SIMPLE      | MAT09F | index | PRIMARY,MATNR9,SLOCN9 | SLOCN9 | 12      | NULL |  10379 | Using where; Using index; Not exists |
+----+-------------+--------+-------+-----------------------+--------+---------+------+--------+--------------------------------------+



In poche parole devo trovare tutte le occorrenze di codice-magazzino di MAD02F che non esistono in MAT09F - a me sembra molto semplice e lineare, vi pare normale che il left join ci metta 28 minuti?!?!

primo esempio di discussione portata avanti parallelamente su due forum da un singolo autore. c'è un nobel per questo? :asd:



uhm penso d'aver risolto così utilizzando le temporary table, na roba del genere:


CREATE TEMPORARY TABLE t1 (MAT CHAR(18) NOT NULL, MAG CHAR(4) NOT NULL);
CREATE INDEX i USING HASH ON t1 (mat,mag);CREATE INDEX i2 USING HASH ON t1 (mat);
CREATE INDEX i3 USING HASH ON t1 (mag);
CREATE TEMPORARY TABLE t2 (MAT CHAR(18), MAG CHAR(4));
CREATE INDEX i USING HASH ON t2 (mat,mag);CREATE INDEX i2 USING HASH ON t2 (mat);
CREATE INDEX i3 USING HASH ON t2 (mag);
INSERT INTO t1 (MAT,MAG) SELECT MDMAT2, MDMAG2 FROM MAD02F;
INSERT INTO t2 SELECT MATNR9, SLOCN9 FROM MAT09F;
SELECT count(*) FROM t1 LEFT JOIN t2 ON t1.MAT=t2.MAT AND t1.MAG=t2.MAG WHERE t2.MAT IS NULL;


ovviamente adesso devo sistemare un attimo la cosa che messa giù così fa schifo, però a quanto pare ora in 1.49 secondi mi trova il risultato... direi che ci siamo, avevo provato anche ad usare l'engine memory ma devo modificare la variabile d'ambiente per le dimensioni massime delle tabelle e comunque non volevo pastrocchiare troppo.

se comunque passa di qui un luminare e mi spiega un attimo mi fa un gran piacere :D

grazie mille!

Non ne capisco un cazzo, ma è ottimo che almeno tu sia riuscito a trovare una soluzione ;)
Ritengo di avere diritto alle royalties sull'acronimo BUBS :lki:
Sono scemo di mio :verovero: Tutto a posto | I don't have a problem with caffeine. I have a problem without caffeine.
Se i nostri cervelli fossero abbastanza semplici da poter essere capiti, allora saremmo così semplici che non capiremmo - Ian Stewart
Fotografia ad mentula


:asd:
per lo spam c'è sempre posto.. però... anche se ho paura di non starti dietro, @Gennocide , che ne pensi?

non tocco sql un minimo oltre una select da 8 anni :pipp:
スニャブロ ufficiale del forum
pulsantoni pulsantosi per greasemonkey: http://bubs.altervista.org/index.php?topic=4.msg183#msg183
script greasemonkey anti-ads: http://bubs.altervista.org/index.php?topic=6.msg2581#msg2581

I miei vaneggi pseudodisegnosi: http://sgnafp.deviantart.com/

"Speed never killed anyone, suddenly becoming stationary, that's what gets you."

io mi fermo praticamente a select x from y where z. non conosco (my)sql.
J:
unita' 4/1981
comp: 7.99%


oooook grazie mille a tutti in ogni caso ;D

giusto per correttezza e deformazione forummistica professionale lo scrivo anche qui: il problema era che per qualche motivo avevo impostato (o si era impostato da solo ma mi pare un'affermazione da utonto) un charset diverso tra le due tabelle e quindi l'indice non poteva essere sfruttato. ergo ho risolto senza accrocchi!! ;D