Hi All!!
I recently have migrated a database from SQL Server 7.0 to Mysql 5.0.14
(I´ve used MySQL Migration tool), mi probem is that the queries where i use
foreing keys are tooo sloowww

Specialy in two tables;

mysql> show create table trafico_guia\G;
*************************** 1. row ***************************
       Table: trafico_guia
Create Table: CREATE TABLE `trafico_guia` (
  `id_area` int(10) NOT NULL,
  `no_guia` int(10) NOT NULL,
  `tipo_doc` smallint(5) NOT NULL,
  `num_guia` varchar(20) NOT NULL,
  `no_carta` varchar(15) default NULL,
  `id_cliente` int(10) NOT NULL,
  `id_personal` int(10) NOT NULL,
  `no_viaje` int(10) NOT NULL,
  `id_remolque1` varchar(10) default NULL,
  `id_unidad` varchar(10) NOT NULL,
  `fecha_guia` datetime NOT NULL,
  `id_remitente` int(10) NOT NULL,
  `id_destinatario` int(10) NOT NULL,
  `id_origen` smallint(5) NOT NULL,
  `id_destino` smallint(5) NOT NULL,
  `id_condujo` int(10) default NULL,
  `recoger_en` varchar(50) default NULL,
  `entregar_en` varchar(50) default NULL,
  `valor_unitario` double(53,30) default NULL,
  `convenido_tonelada` double(53,30) default NULL,
  `id_fraccion` smallint(5) default NULL,
  `valor_declarado` varchar(7) default NULL,
  `tipo_pago` char(1) NOT NULL,
  `flete` decimal(19,4) NOT NULL,
  `seguro` decimal(19,4) NOT NULL,
  `maniobras` decimal(19,4) NOT NULL,
  `autopistas` decimal(19,4) NOT NULL,
  `otros` decimal(19,4) NOT NULL,
  `subtotal` decimal(19,4) NOT NULL,
  `iva_guia` decimal(19,4) NOT NULL,
  `observaciones_guia` varchar(250) default NULL,
  `no_remision` varchar(20) default NULL,
  `status_guia` char(1) NOT NULL,
  `motivo_cancelacion` varchar(250) default NULL,
  `fecha_confirmacion` datetime default NULL,
  `fecha_vencimiento` datetime default NULL,
  `fecha_pago` datetime default NULL,
  `obs_cobranza` varchar(250) default NULL,
  `plaza_emision` smallint(5) NOT NULL,
  `tipo_cobro` char(1) default NULL,
  `cobro_viaje_kms` decimal(19,4) default NULL,
  `kms_guia` int(10) default NULL,
  `conducir_de` smallint(5) NOT NULL,
  `conducir_a` smallint(5) NOT NULL,
  `id_remolque2` varchar(10) default NULL,
  `prestamo` varchar(1) NOT NULL,
  `id_tipo_moneda` smallint(5) NOT NULL,
  `monto_tipo_cambio` decimal(19,4) NOT NULL,
  `id_ingreso` varchar(8) default NULL,
  `fecha_ingreso` datetime default NULL,
  `num_guia_asignado` varchar(20) default NULL,
  `no_deposito` int(10) default NULL,
  `id_serieguia` int(10) default NULL,
  `unidadplaca` varchar(20) default NULL,
  `unidadtipo` varchar(40) default NULL,
  `rem1placa` varchar(20) default NULL,
  `rem1tipo` varchar(40) default NULL,
  `rem2placa` varchar(20) default NULL,
  `rem2tipo` varchar(40) default NULL,
  `personalnombre` varchar(80) default NULL,
  `monto_ncredito` decimal(19,4) default NULL,
  `tipo_facturacion` varchar(25) default NULL,
  `monto_ncargo` decimal(19,4) default NULL,
  `monto_pago` decimal(19,4) default NULL,
  `factor_iva` double(53,30) default NULL,
  `sustituye_documento` varchar(20) default NULL,
  `monto_ivancredito` decimal(19,4) default NULL,
  `cant_movguia` tinyint(3) default NULL,
  `monto_ivancargo` decimal(19,4) default NULL,
  `tipo_origen` tinyint(3) default NULL,
  `nota_entrega` varchar(25) default NULL,
  `factura_pemex` varchar(25) default NULL,
  `vale_pemex` varchar(25) default NULL,
  `pedimento` varchar(25) default NULL,
  `factura_cliente` varchar(25) default NULL,
  `tipo_iva` varchar(1) default NULL,
  `fecha_cancelacion` datetime default NULL,
  `fecha_contabilizado` datetime default NULL,
  `clasificacion_doc` tinyint(3) default NULL,
  `no_transferencia_cobranza` int(10) default NULL,
  `conv_operador` double(53,30) default NULL,
  `conv_permisionario` double(53,30) default NULL,
  `num_guiacancel` varchar(25) default NULL,
  `monto_comisiontercero` double(53,30) default NULL,
  `id_linearem1` varchar(10) default NULL,
  `id_linearem2` varchar(10) default NULL,
  `monto_retencion` decimal(18,6) default NULL,
  PRIMARY KEY  (`id_area`,`no_guia`),
  UNIQUE KEY `xak_trafnumguia` (`num_guia`),
  KEY `XAK1status_guia` (`status_guia`),
  KEY `fk_clasificadoctrafguia` (`clasificacion_doc`),
  KEY `fk_guia_conducir` (`id_personal`),
  KEY `fk_guiadestino` (`id_destino`),
  KEY `fk_guiamoneda` (`id_tipo_moneda`),
  KEY `fk_guiaunidad` (`id_unidad`),
  KEY `fk1_cliente` (`id_cliente`),
  KEY `fk1_destinatario` (`id_destinatario`),
  KEY `fk1_guiacarta` (`id_area`,`no_carta`),
  KEY `fk1_no_viaje` (`id_area`,`no_viaje`),
  KEY `fk1_origen` (`id_origen`),
  KEY `fk1_remitente` (`id_remitente`),
  CONSTRAINT `fk1_cliente` FOREIGN KEY (`id_cliente`) REFERENCES
`trafico_cliente` (`id_cliente`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk1_destinatario` FOREIGN KEY (`id_destinatario`) REFERENCES
`trafico_cliente` (`id_cliente`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk1_guiacarta` FOREIGN KEY (`id_area`, `no_carta`) REFERENCES
`trafico_carta_cobro` (`id_area`, `no_carta`) ON DELETE NO ACTION ON UPDATE
NO ACTION,
  CONSTRAINT `fk1_no_viaje` FOREIGN KEY (`id_area`, `no_viaje`) REFERENCES
`trafico_viaje` (`id_area`, `no_viaje`) ON DELETE NO ACTION ON UPDATE NO
ACTION,
  CONSTRAINT `fk1_origen` FOREIGN KEY (`id_origen`) REFERENCES
`trafico_plaza` (`id_plaza`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk1_remitente` FOREIGN KEY (`id_remitente`) REFERENCES
`trafico_cliente` (`id_cliente`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_clasificadoctrafguia` FOREIGN KEY (`clasificacion_doc`)
REFERENCES `trafico_clasifica_doc` (`id_clasificacion_doc`) ON DELETE NO
ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_guiadestino` FOREIGN KEY (`id_destino`) REFERENCES
`trafico_plaza` (`id_plaza`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_guiamoneda` FOREIGN KEY (`id_tipo_moneda`) REFERENCES
`compras_tipo_moneda` (`id_tipo_moneda`) ON DELETE NO ACTION ON UPDATE NO
ACTION,
  CONSTRAINT `fk_guiaunidad` FOREIGN KEY (`id_unidad`) REFERENCES
`mtto_unidades` (`id_unidad`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_guia_area` FOREIGN KEY (`id_area`) REFERENCES
`general_area` (`id_area`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_guia_conducir` FOREIGN KEY (`id_personal`) REFERENCES
`personal_personal` (`id_personal`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.88 sec)

(note that this query´s been executed in almost a second

mysql> show create table trafico_viaje\G;
*************************** 1. row ***************************
       Table: trafico_viaje
Create Table: CREATE TABLE `trafico_viaje` (
  `id_area` int(10) NOT NULL,
  `no_viaje` int(10) NOT NULL,
  `id_unidad` varchar(10) default NULL,
  `id_personal` int(10) default NULL,
  `fecha_viaje` datetime default NULL,
  `kms_camion_vacio` int(10) default NULL,
  `kms_camion_lleno` int(10) default NULL,
  `kms_operador` int(10) default NULL,
  `lts_viaje` double(53,30) default NULL,
  `rendimiento_viaje` double(53,30) default NULL,
  `rendimiento_real` double(53,30) default NULL,
  `status_viaje` char(1) NOT NULL,
  `kms_real` int(10) default NULL,
  `fecha_fin_viaje` datetime default NULL,
  `id_ruta` smallint(5) NOT NULL,
  `no_liquidacion` int(10) default NULL,
  `sueldo_operador` decimal(19,4) default NULL,
  `compensaciones` decimal(19,4) default NULL,
  `fecha_real_viaje` datetime default NULL,
  `fecha_real_fin_viaje` datetime default NULL,
  `lts_empresa` double(53,30) default NULL,
  `id_remolque1` varchar(10) default NULL,
  `id_remolque2` varchar(10) default NULL,
  `rend_esperado` double(53,30) default NULL,
  `id_sector` tinyint(3) default NULL,
  `id_subsector` tinyint(3) default NULL,
  `viaje_ant` int(10) default NULL,
  `no_liquidacion_rend` int(10) default NULL,
  `id_dolly` varchar(10) default NULL,
  `id_ingreso` varchar(8) default NULL,
  `fecha_ingreso` datetime default NULL,
  `puntaje_viaje` int(10) default NULL,
  `no_kit` varchar(10) default NULL,
  `thermo1` varchar(10) default NULL,
  `thermo2` varchar(10) default NULL,
  `lts_empthermo1` double(53,30) default NULL,
  `lts_empthermo2` double(53,30) default NULL,
  `hrs_realthermo1` int(10) default NULL,
  `hrs_realthermo2` int(10) default NULL,
  `rent_espthermo1` double(53,30) default NULL,
  `rent_espthermo2` double(53,30) default NULL,
  `rent_realthermo1` double(53,30) default NULL,
  `rent_realthermo2` double(53,30) default NULL,
  `lts_viajethermo1` double(53,30) default NULL,
  `lts_viajethermo2` double(53,30) default NULL,
  `rend_espthermo1` double(53,30) default NULL,
  `rend_espthermo2` double(53,30) default NULL,
  `rend_realthermo1` double(53,30) default NULL,
  `rend_realthermo2` double(53,30) default NULL,
  `viajeactual` char(1) default NULL,
  `status_desp` char(1) default NULL,
  `no_ejes` int(10) default NULL,
  `id_linearem1` varchar(10) default NULL,
  `id_linearem2` varchar(10) default NULL,
  PRIMARY KEY  (`id_area`,`no_viaje`),
  KEY `fk_viajepersonal` (`id_personal`),
  KEY `fk_viajeruta` (`id_ruta`),
  CONSTRAINT `fk_viajearea` FOREIGN KEY (`id_area`) REFERENCES
`general_area` (`id_area`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_viajepersonal` FOREIGN KEY (`id_personal`) REFERENCES
`personal_personal` (`id_personal`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_viajeruta` FOREIGN KEY (`id_ruta`) REFERENCES
`trafico_ruta` (`id_ruta`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.17 sec)

When I try this query it never finishes

select a.id_unidad,
        b.fecha_guia,
        b.monto_pago*b.monto_tipo_cambio 
from trafico_viaje a,trafico_guia b 
where a.no_viaje=b.no_viaje 
and b.fecha_guia between '2005/01/01' and '2005/01/31';

My explain result shows:
mysql> explain select
a.id_unidad,b.fecha_guia,b.monto_pago*b.monto_tipo_cambio from trafico_viaje
a,trafico_guia b where a.no_viaje=b.no_viaje and b.fecha_guia between
'2005/01/01' and '2005/01/31';
+----+-------------+-------+------+---------------+------+---------+------+-
------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  |
rows  | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+-
------+-------------+
|  1 | SIMPLE      | b     | ALL  | NULL          | NULL | NULL    | NULL |
37851 | Using where |
|  1 | SIMPLE      | a     | ALL  | NULL          | NULL | NULL    | NULL |
54058 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+-
------+-------------+
2 rows in set (0.04 sec)

I´ve tryed with FORCE KEY, USING,etc. But those don´t work.

Should I try changing from InnoDB storage engine to MyISAM ??

mysql>  show variables like 'Inno%';
+---------------------------------+------------------------+
| Variable_name                   | Value                  |
+---------------------------------+------------------------+
| innodb_additional_mem_pool_size | 1048576                |
| innodb_autoextend_increment     | 8                      |
| innodb_buffer_pool_awe_mem_mb   | 0                      |
| innodb_buffer_pool_size         | 8388608                |
| innodb_checksums                | ON                     |
| innodb_commit_concurrency       | 0                      |
| innodb_concurrency_tickets      | 500                    |
| innodb_data_file_path           | ibdata1:10M:autoextend |
| innodb_data_home_dir            |                        |
| innodb_doublewrite              | ON                     |
| innodb_fast_shutdown            | 1                      |
| innodb_file_io_threads          | 4                      |
| innodb_file_per_table           | OFF                    |
| innodb_flush_log_at_trx_commit  | 1                      |
| innodb_flush_method             |                        |
| innodb_force_recovery           | 0                      |
| innodb_lock_wait_timeout        | 50                     |
| innodb_locks_unsafe_for_binlog  | OFF                    |
| innodb_log_arch_dir             |                        |
| innodb_log_archive              | OFF                    |
| innodb_log_buffer_size          | 1048576                |
| innodb_log_file_size            | 5242880                |
| innodb_log_files_in_group       | 2                      |
| innodb_log_group_home_dir       | ./                     |
| innodb_max_dirty_pages_pct      | 90                     |
| innodb_max_purge_lag            | 0                      |
| innodb_mirrored_log_groups      | 1                      |
| innodb_open_files               | 300                    |
| innodb_support_xa               | ON                     |
| innodb_sync_spin_loops          | 20                     |
| innodb_table_locks              | ON                     |
| innodb_thread_concurrency       | 20                     |
| innodb_thread_sleep_delay       | 10000                  |
+---------------------------------+------------------------+
33 rows in set (0.00 sec)


Tanks a lot for any suggestion



+----------------------------------------+
| ISC Edwin Cruz García                  |
| Gerente de T.I.                        |
|  +--------------------+ --\____        |
|  |                    | |  |  \        |
|  |  Transportes medel | |  |   +---+   |
|  +-------------------===+--+_______ï   |
|   (ô)(ô)     (ô)(ô)  (ô)*******(ô) ¨   |
|                                        |
| Tel.   01 (449) 910 30 90 x3054        |
| Móvil: 01 (449) 111 29 03              |
| email: [EMAIL PROTECTED]              |
+----------------------------------------+

Reply via email to