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] | +----------------------------------------+