MySQL SELECT从同一个表中使用a和b并插入到新表中

时间:2013-05-07 15:50:03

标签: mysql performance indexing

使用a和b从同一个表中选择。 根据a中的条件和插入新表中的b进行选择。 查询需要30分钟才能运行

drop table if exists  feedlot.deaths; 
CREATE  TABLE `feedlot`.`deaths` (
  `recno` INT(30) NOT NULL ,
  `calfrecno` VARCHAR(50) NULL ,
  `lotrecno` VARCHAR (20) NULL ,
    `treatdate` DATE NULL ,
    `deaths_tothispoint` INT(3) NULL,
    `distinct_deaths_tothispoint` INT(3) NULL

   );
insert into deaths 
    (   recno,
        calfrecno,
        lotrecno,
        treatdate,
        deaths_tothispoint,
        distinct_deaths_tothispoint
)
SELECT
        a.recno,
        a.calfrecno,
        a.lotrecno,
        a.treatdate,
        count(b.didnotfinish),
        count(distinct(b.calfrecno))
    FROM feedlot.brdcalves_test a ,feedlot.brdcalves_test b
        JOIN brdcalves_test ON a.lotrecno = b.lotrecno
        WHERE b.lotrecno = a.lotrecno 
                  AND b.didnotfinish = 1
                    AND b.treatdate < a.treatdate
                    GROUP BY a.recno;

mysql> select count(*) from brdcalves_test;
+----------+
| count(*) |
+----------+
|  6314459 |
+----------+
1 row in set (3.16 sec)

服务器是Win 7 48GB的RAM 英特尔Xenon 2.26Ghz(2个处理器)

mysql> show variables like '%innodb%';
+------------------------------------------+------------------------+
| Variable_name                            | Value                  |
+------------------------------------------+------------------------+
| ignore_builtin_innodb                    | OFF                    |
| innodb_adaptive_flushing                 | ON                     |
| innodb_adaptive_flushing_lwm             | 10                     |
| innodb_adaptive_hash_index               | ON                     |
| innodb_adaptive_max_sleep_delay          | 150000                 |
| innodb_additional_mem_pool_size          | 33554432               |
| innodb_api_bk_commit_interval            | 5                      |
| innodb_api_disable_rowlock               | OFF                    |
| innodb_api_enable_binlog                 | OFF                    |
| innodb_api_enable_mdl                    | OFF                    |
| innodb_api_trx_level                     | 0                      |
| innodb_autoextend_increment              | 1000                   |
| innodb_autoinc_lock_mode                 | 1                      |
| innodb_buffer_pool_dump_at_shutdown      | OFF                    |
| innodb_buffer_pool_dump_now              | OFF                    |
| innodb_buffer_pool_filename              | ib_buffer_pool         |
| innodb_buffer_pool_instances             | 10                     |
| innodb_buffer_pool_load_abort            | OFF                    |
| innodb_buffer_pool_load_at_startup       | OFF                    |
| innodb_buffer_pool_load_now              | OFF                    |
| innodb_buffer_pool_size                  | 12884901888            |
| innodb_change_buffer_max_size            | 25                     |
| innodb_change_buffering                  | all                    |
| innodb_checksum_algorithm                | crc32                  |
| innodb_checksums                         | ON                     |
| innodb_cmp_per_index_enabled             | OFF                    |
| innodb_commit_concurrency                | 0                      |
| innodb_compression_failure_threshold_pct | 5                      |
| innodb_compression_level                 | 6                      |
| innodb_compression_pad_pct_max           | 50                     |
| innodb_concurrency_tickets               | 5000                   |
| innodb_data_file_path                    | ibdata1:12M:autoextend |
| innodb_data_home_dir                     |                        |
| innodb_disable_sort_file_cache           | OFF                    |
| innodb_doublewrite                       | ON                     |
| innodb_fast_shutdown                     | 1                      |
| innodb_file_format                       | Antelope               |
| innodb_file_format_check                 | ON                     |
| innodb_file_format_max                   | Antelope               |
| innodb_file_per_table                    | ON                     |
| innodb_flush_log_at_timeout              | 1                      |
| innodb_flush_log_at_trx_commit           | 1                      |
| innodb_flush_method                      |                        |
| innodb_flush_neighbors                   | 1                      |
| innodb_flushing_avg_loops                | 30                     |
| innodb_force_load_corrupted              | OFF                    |
| innodb_force_recovery                    | 0                      |
| innodb_ft_aux_table                      |                        |
| innodb_ft_cache_size                     | 8000000                |
| innodb_ft_enable_diag_print              | OFF                    |
| innodb_ft_enable_stopword                | ON                     |
| innodb_ft_max_token_size                 | 84                     |
| innodb_ft_min_token_size                 | 3                      |
| innodb_ft_num_word_optimize              | 2000                   |
| innodb_ft_server_stopword_table          |                        |
| innodb_ft_sort_pll_degree                | 2                      |
| innodb_ft_user_stopword_table            |                        |
| innodb_io_capacity                       | 200                    |
| innodb_io_capacity_max                   | 2000                   |
| innodb_large_prefix                      | OFF                    |
| innodb_lock_wait_timeout                 | 50                     |
| innodb_locks_unsafe_for_binlog           | OFF                    |
| innodb_log_buffer_size                   | 16777216               |
| innodb_log_compressed_pages              | ON                     |
| innodb_log_file_size                     | 268435456              |
| innodb_log_files_in_group                | 2                      |
| innodb_log_group_home_dir                | .\                     |
| innodb_lru_scan_depth                    | 1024                   |
| innodb_max_dirty_pages_pct               | 75                     |
| innodb_max_dirty_pages_pct_lwm           | 0                      |
| innodb_max_purge_lag                     | 0                      |
| innodb_max_purge_lag_delay               | 0                      |
| innodb_mirrored_log_groups               | 1                      |
| innodb_monitor_disable                   |                        |
| innodb_monitor_enable                    |                        |
| innodb_monitor_reset                     |                        |
| innodb_monitor_reset_all                 |                        |
| innodb_old_blocks_pct                    | 37                     |
| innodb_old_blocks_time                   | 1000                   |
| innodb_online_alter_log_max_size         | 134217728              |
| innodb_open_files                        | 300                    |
| innodb_optimize_fulltext_only            | OFF                    |
| innodb_page_size                         | 16384                  |
| innodb_print_all_deadlocks               | OFF                    |
| innodb_purge_batch_size                  | 300                    |
| innodb_purge_threads                     | 1                      |
| innodb_random_read_ahead                 | OFF                    |
| innodb_read_ahead_threshold              | 56                     |
| innodb_read_io_threads                   | 4                      |
| innodb_read_only                         | OFF                    |
| innodb_replication_delay                 | 0                      |
| innodb_rollback_on_timeout               | OFF                    |
| innodb_rollback_segments                 | 128                    |
| innodb_sort_buffer_size                  | 1048576                |
| innodb_spin_wait_delay                   | 6                      |
| innodb_stats_auto_recalc                 | ON                     |
| innodb_stats_method                      | nulls_equal            |
| innodb_stats_on_metadata                 | OFF                    |
| innodb_stats_persistent                  | ON                     |
| innodb_stats_persistent_sample_pages     | 20                     |
| innodb_stats_sample_pages                | 8                      |
| innodb_stats_transient_sample_pages      | 8                      |
| innodb_strict_mode                       | OFF                    |
| innodb_support_xa                        | ON                     |
| innodb_sync_array_size                   | 1                      |
| innodb_sync_spin_loops                   | 30                     |
| innodb_table_locks                       | ON                     |
| innodb_thread_concurrency                | 17                     |
| innodb_thread_sleep_delay                | 0                      |
| innodb_undo_directory                    | .                      |
| innodb_undo_logs                         | 128                    |
| innodb_undo_tablespaces                  | 0                      |
| innodb_use_native_aio                    | ON                     |
| innodb_use_sys_malloc                    | ON                     |
| innodb_version                           | 5.6.11                 |
| innodb_write_io_threads                  | 4                      |
+------------------------------------------+------------------------+


SELECT
a.recno,
a.calfrecno,
a.lotrecno,
a.treatdate,
count(b.didnotfinish),
count(distinct(b.calfrecno))
FROM feedlot.brdcalves_test a ,feedlot.brdcalves_test b
JOIN brdcalves_test ON a.lotrecno = b.lotrecno
WHERE b.lotrecno = a.lotrecno 
AND b.didnotfinish = 1
AND b.treatdate < a.treatdate
GROUP BY a.recno;
CREATE TABLE `brdcalves_test` (
  `recno` int(30) NOT NULL DEFAULT '0',
  `calfrecno` varchar(50) DEFAULT NULL,
  `fyydlotno` varchar(50) DEFAULT NULL,
  `lotrecno` varchar(20) DEFAULT NULL,
  `FY` varchar(10) DEFAULT NULL,
  `YDNO` varchar(10) DEFAULT NULL,
  `tagno` varchar(50) DEFAULT NULL,
  `lotno` varchar(50) DEFAULT NULL,
  `Indate` date DEFAULT NULL,
  `Pen` varchar(10) DEFAULT NULL,
  `headin` int(11) DEFAULT NULL,
  `sex_new` varchar(10) DEFAULT NULL,
  `totinwt` int(11) DEFAULT NULL,
  `avginwt` int(11) DEFAULT NULL,
  `totpaywt` int(11) DEFAULT NULL,
  `avgpaywt` int(11) DEFAULT NULL,
  `Risk` varchar(10) DEFAULT NULL,
  `Treatdate` date DEFAULT NULL,
  `eventno` int(4) DEFAULT NULL,
  `Diag` varchar(45) DEFAULT NULL,
  `dxcode` varchar(45) DEFAULT NULL,
  `Antimicrobial` int(2) DEFAULT NULL 
  `deaddate` date DEFAULT '1111-11-11',
  `didnotfinish` int(2) DEFAULT '0',
  `treatdof_new` int(11) DEFAULT NULL 
  `Wt` int(10) DEFAULT NULL,
  `Temp` decimal(5,2) DEFAULT NULL,
  `Meda` varchar(10) DEFAULT NULL,
  `Medb` varchar(10) DEFAULT NULL,
  `Medc` varchar(10) DEFAULT NULL,
  `Medd` varchar(10) DEFAULT NULL,
  `Mede` varchar(10) DEFAULT NULL,
  `Medf` varchar(10) DEFAULT NULL,
  `overallclass` varchar(45) DEFAULT NULL,
  `nsaidyn` int(2) DEFAULT '0' COMMENT 'Indicates if this calf received an NSAID on this   treatment\\n1 = YES\\n0 = NO',
  `classconcat` varchar(70) DEFAULT NULL,
  `Massdate` date DEFAULT NULL,
  `Procdate` date DEFAULT NULL,
  `Dieddx` varchar(45) DEFAULT NULL,
  `dieddxcode` varchar(45) DEFAULT NULL,
  `abxtreatno` int(2) DEFAULT NULL 
  `abxtreatno_runningtotal` int(2) DEFAULT NULL 
  `treatnobrdabx` int(2) DEFAULT NULL 
  `treatnobrdabx_runningtotal` int(2) DEFAULT NULL,
  `abxtx_after_brdabxtx_yn` int(1) DEFAULT NULL,
  `pulled_after_brdabxtx_yn` int(1) DEFAULT NULL,
  `txfailurep3` int(3) DEFAULT NULL,
  `txfailurep4` int(3) DEFAULT NULL,
  `txfailureP1` int(3) DEFAULT NULL 
  `txfailurep2` int(3) DEFAULT NULL 
  `Antimica_new` int(2) DEFAULT NULL 
  `Antimicb_new` int(2) DEFAULT NULL COMMENT '1 if Medb is an antimicrobial otherwise 0',
  `Antimicc_new` int(2) DEFAULT NULL COMMENT '1 if Medac is an antimicrobial otherwise 0',
  `Antimicd_new` int(2) DEFAULT NULL COMMENT '1 if Medd is an antimicrobial otherwise 0',
  `Antimice_new` int(2) DEFAULT NULL COMMENT '1 if Mede is an antimicrobial otherwise 0',
  `Antimicf_new` int(2) DEFAULT NULL COMMENT '1 if Medf is an antimicrobial otherwise 0',
  `Antimic_concat` varchar(30) DEFAULT NULL 
  `brdabxyn` int(2) DEFAULT '0'  
  `sumbrdabxyn` int(2) DEFAULT NULL 
  `eventspriortobrdyn` int(2) DEFAULT '0' 
  `nbreventspriortobrd` int(2) DEFAULT '0' 
  `numbprevpulls` int(1) DEFAULT NULL 
  `arrivalmonth` int(3) DEFAULT NULL 
  `arrivalquarter` int(3) DEFAULT NULL 
  `arrivalyear` int(5) DEFAULT NULL 
  `pulldayofweek` varchar(20) DEFAULT NULL 
  `pullweekdayYN` int(2) DEFAULT NULL 
  `pullonmondayYN` int(2) DEFAULT '0' 
  `pullmonth` int(3) DEFAULT NULL 
  `pullquarter` int(3) DEFAULT NULL 
  `pullyear` int(3) DEFAULT NULL,
  `1sttxsuccessrate_p1` decimal(5,2) DEFAULT NULL 
  `1sttxsuccessrate_p2` decimal(5,2) DEFAULT NULL 
  `1sttxsuccessrate_p3` decimal(5,2) DEFAULT NULL,
  `1sttxsuccessrate_p4` decimal(5,2) DEFAULT NULL,
  `propbrdcasestothispoint` decimal(5,2) DEFAULT NULL COMMENT 'brdcasestothispoint/headin)*100',
  `distinct_brdcasestothispoint` int(3) DEFAULT NULL COMMENT 'number of animals treated for BRD prior to this event.',
  `propdistcasestothispoint` decimal(5,2) DEFAULT NULL COMMENT '(distinct_brdcasestothispoint/headin)*100',
  `brdcases_includetoday` int(3) DEFAULT NULL,
  `distinct_brdcases_includetoday` int(3) DEFAULT NULL,
  `propbrdcases_includetoday` decimal(5,2) DEFAULT NULL,
  `propdistcases_includetoday` decimal(5,2) DEFAULT NULL,
  `brdcases103andover` int(3) DEFAULT NULL,
  `propbrdcases103andover` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases103andover` int(3) DEFAULT NULL,
  `propdistcases103andover` decimal(5,2) DEFAULT NULL,
  `brdcases1035andover` int(3) DEFAULT NULL,
  `propbrdcases1035andover` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases1035andover` int(3) DEFAULT NULL,
  `propdistcases1035andover` decimal(5,2) DEFAULT NULL,
  `brdcases104andover` int(3) DEFAULT NULL,
  `propbrdcases104andover` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases104andover` int(3) DEFAULT NULL,
  `brdcases2prevdays` int(3) DEFAULT NULL,
  `propbrdcases2prevdays` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases2prevdays` int(3) DEFAULT NULL,
  `propdistcases2prevdays` decimal(5,2) DEFAULT NULL,
  `propdistcases104andover` decimal(5,2) DEFAULT NULL,
  `brdcases2prevdays_104` int(3) DEFAULT NULL,
  `propbrdcases2prevdays104` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases2prevdays_104` int(3) DEFAULT NULL,
  `propdistcases2prevdays104` decimal(5,2) DEFAULT NULL,
  `brdcases2prevdays_1035` int(3) DEFAULT NULL,
  `propbrdcases2prevdays1035` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases2prevdays_1035` int(3) DEFAULT NULL,
  `propdistcases2prevdays1035` decimal(5,2) DEFAULT NULL,
  `brdcases2prevdays_103` int(3) DEFAULT NULL,
  `propbrdcases2prevdays103` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases2prevdays_103` int(3) DEFAULT NULL,
  `propdistcases2prevdays103` decimal(5,2) DEFAULT NULL,
  `brdcases3prevdays` int(3) DEFAULT NULL,
  `distinct_brdcases3prevdays` int(3) DEFAULT NULL,
  `propbrdcases3prevdays` decimal(5,2) DEFAULT NULL,
  `propdistcases3prevdays` decimal(5,2) DEFAULT NULL,
  `brdcases3prevdays_103` int(3) DEFAULT NULL,
  `distinct_brdcases3prevdays_103` int(3) DEFAULT NULL,
  `propbrdcases3prevdays103` decimal(5,2) DEFAULT NULL,
  `propdistcases3prevdays103` decimal(5,2) DEFAULT NULL,
  `brdcases3prevdays_1035` int(3) DEFAULT NULL,
  `distinct_brdcases3prevdays_1035` int(3) DEFAULT NULL,
  `propbrdcases3prevdays1035` decimal(5,2) DEFAULT NULL,
  `propdistcases3prevdays1035` decimal(5,2) DEFAULT NULL,
  `brdcases3prevdays_104` int(3) DEFAULT NULL,
  `distinct_brdcases3prevdays_104` int(3) DEFAULT NULL,
  `propbrdcases3prevdays104` decimal(5,2) DEFAULT NULL,
  `propdistcases3prevdays104` decimal(5,2) DEFAULT NULL,
  `brdcases5prevdays` int(3) DEFAULT NULL,
  `propbrdcases5prevdays` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases5prevdays` int(3) DEFAULT NULL,
  `propdistcases5prevdays` decimal(5,2) DEFAULT NULL,
  `brdcases5prevdays_103` int(3) DEFAULT NULL,
  `propbrdcases5prevdays_103` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases5prevdays_103` int(3) DEFAULT NULL,
  `propdistcases5prevdays_103` decimal(5,2) DEFAULT NULL,
  `brdcases5prevdays_1035` int(3) DEFAULT NULL,
  `propbrdcases5prevdays_1035` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases5prevdays_1035` int(3) DEFAULT NULL,
  `propdistcases5prevdays_1035` decimal(5,2) DEFAULT NULL,
  `brdcases5prevdays_104` int(3) DEFAULT NULL,
  `propbrdcases5prevdays_104` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases5prevdays_104` int(3) DEFAULT NULL,
  `propdistcases5prevdays_104` decimal(5,2) DEFAULT NULL,
  `brdcases10prevdays` int(3) DEFAULT NULL,
  `propbrdcases10prevdays` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases10prevdays` int(3) DEFAULT NULL,
  `propdistcases10prevdays` decimal(5,2) DEFAULT NULL,
  `brdcases10prevdays_103` int(3) DEFAULT NULL,
  `propbrdcases10prevdays_103` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases10prevdays_103` int(3) DEFAULT NULL,
  `propdistcases10prevdays_103` decimal(5,2) DEFAULT NULL,
  `brdcases10prevdays_1035` int(3) DEFAULT NULL,
  `propbrdcases10prevdays_1035` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases10prevdays_1035` int(3) DEFAULT NULL,
  `propdistcases10prevdays_1035` decimal(5,2) DEFAULT NULL,
  `brdcases10prevdays_104` int(3) DEFAULT NULL,
  `propbrdcases10prevdays_104` decimal(5,2) DEFAULT NULL,
  `distinct_brdcases10prevdays_104` int(3) DEFAULT NULL,
  `propdistcases10prevdays_104` decimal(5,2) DEFAULT NULL,
  `deathstothispoint` int(3) DEFAULT NULL,
  `propdeathstothispoint` decimal(5,2) DEFAULT NULL,
  `deathsprev2days` int(3) DEFAULT '0',
  `propdeaths2prevdays` decimal(5,2) DEFAULT '0.00',
  `deathsprev3days` int(3) DEFAULT '0',
  `propdeaths3prevdays` decimal(5,2) DEFAULT '0.00',
  `deathsprev5days` int(3) DEFAULT '0',
  `propdeaths5prevdays` decimal(5,2) DEFAULT '0.00',
  `deathsprev10days` int(3) DEFAULT '0',
  `propdeaths10prevdays` decimal(5,2) DEFAULT '0.00',
  KEY `recno_indx` (`recno`),
  KEY `lottreatdidnot_indx` (`lotrecno`,`Treatdate`,`didnotfinish`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

首先,而不是

FROM feedlot.brdcalves_test a ,feedlot.brdcalves_test b
JOIN brdcalves_test ON a.lotrecno = b.lotrecno .....

应该是

FROM feedlot.brdcalves_test a 
JOIN feedlot.brdcalves_test b ON a.lotrecno = b.lotrecno
AND b.didnotfinish = 1 AND b.treatdate < a.treatdate 
GROUP BY  a.recno

这仍然是一个很长的查询,但至少你没有做一个额外的无用的加入