Thanx,  that's exactly it.  I feel a bit embarassed as this came up on
the list about 2-3 weeks ago, and I found the answer as I was waiting
for the replies.

-Sheeri

On 1/20/06, gerald_clark <[EMAIL PROTECTED]> wrote:
> sheeri kritzer wrote:
>
> >Hi folks,
> >
> >I'm attempting to optimize a query -- it's quite a simple one, actually.
> >
> >SELECT uid from Bill_Sales WHERE startDate > '[some date]';
> >
> >mysql> show create table Bill_Sales\G
> >*************************** 1. row ***************************
> >       Table: Bill_Sales
> >Create Table: CREATE TABLE `Bill_Sales` (
> >  `sales_id` int(4) unsigned NOT NULL auto_increment,
> >  `uid` int(10) unsigned NOT NULL default '0',
> >  `created` datetime NOT NULL default '0000-00-00 00:00:00',
> >  `modified` timestamp NOT NULL default '0000-00-00 00:00:00',
> >  `startDate` date NOT NULL default '0000-00-00',
> >  `endDate` date NOT NULL default '0000-00-00',
> >  `typesale` enum('pos','void','chargeback','refunded') default NULL,
> >  PRIMARY KEY  (`sales_id`),
> >  KEY `uid` (`uid`),
> >  KEY `startDate` (`startDate`,`endDate`,`typesale`),
> >  KEY `endDate` (`endDate`,`startDate`,`typesale`)
> >) ENGINE=MyISAM DEFAULT CHARSET=latin1
> >1 row in set (0.00 sec)
> >
> >mysql> explain SELECT uid from Bill_Sales WHERE startDate > '2005-11-22';
> >+----+-------------+------------+------+---------------+------+---------+------+---------+-------------+
> >| id | select_type | table      | type | possible_keys | key  |
> >key_len | ref  | rows    | Extra       |
> >+----+-------------+------------+------+---------------+------+---------+------+---------+-------------+
> >|  1 | SIMPLE      | Bill_Sales | ALL  | startDate     | NULL |
> >NULL | NULL | 1028766 | Using where |
> >+----+-------------+------------+------+---------------+------+---------+------+---------+-------------+
> >1 row in set (0.00 sec)
> >
> >mysql> explain SELECT uid from Bill_Sales WHERE startDate > '2005-11-23';
> >+----+-------------+------------+-------+---------------+-----------+---------+------+--------+-------------+
> >| id | select_type | table      | type  | possible_keys | key       |
> >key_len | ref  | rows   | Extra       |
> >+----+-------------+------------+-------+---------------+-----------+---------+------+--------+-------------+
> >|  1 | SIMPLE      | Bill_Sales | range | startDate     | startDate |
> >     3 | NULL | 192022 | Using where |
> >+----+-------------+------------+-------+---------------+-----------+---------+------+--------+-------------+
> >1 row in set (0.00 sec)
> >
> >The cutoff date for using the index versus not using the index is
> >around 2 months ago!
> >
> >This always happens on the production server, but I cannot get it to
> >work if I recreate the table without all the data.  However, we've
> >replicated the data to a few machines, and the explains are consistent
> >with the replicated data.
> >
> >So I run a REPAIR TABLE, which should fix the indexes.  It definitely
> >changed something, because now the cutoff date is about a week ago.
> >
> >mysql> explain SELECT uid from Bill_Sales WHERE startDate > "2006-01-13";
> >+----+-------------+------------+------+---------------+------+---------+------+---------+-------------+
> >| id | select_type | table      | type | possible_keys | key  |
> >key_len | ref  | rows    | Extra       |
> >+----+-------------+------------+------+---------------+------+---------+------+---------+-------------+
> >|  1 | SIMPLE      | Bill_Sales | ALL  | startDate     | NULL |
> >NULL | NULL | 1028777 | Using where |
> >+----+-------------+------------+------+---------------+------+---------+------+---------+-------------+
> >1 row in set (0.00 sec)
> >
> >mysql> explain SELECT uid from Bill_Sales WHERE startDate > "2006-01-14";
> >+----+-------------+------------+-------+---------------+-----------+---------+------+--------+-------------+
> >| id | select_type | table      | type  | possible_keys | key       |
> >key_len | ref  | rows   | Extra       |
> >+----+-------------+------------+-------+---------------+-----------+---------+------+--------+-------------+
> >|  1 | SIMPLE      | Bill_Sales | range | startDate     | startDate |
> >     3 | NULL | 190891 | Using where |
> >+----+-------------+------------+-------+---------------+-----------+---------+------+--------+-------------+
> >1 row in set (0.00 sec)
> >
> >Why would the query do this?  And why does it change when I run a repair 
> >table?
> >
> >(show status:
> >mysql> show status;
> >+----------------------------+------------+
> >| Variable_name              | Value      |
> >+----------------------------+------------+
> >| Aborted_clients            | 74279      |
> >| Aborted_connects           | 146        |
> >| Binlog_cache_disk_use      | 0          |
> >| Binlog_cache_use           | 0          |
> >| Bytes_received             | 1163526992 |
> >| Bytes_sent                 | 359522512  |
> >| Com_admin_commands         | 0          |
> >| Com_alter_db               | 0          |
> >| Com_alter_table            | 45         |
> >| Com_analyze                | 1          |
> >| Com_backup_table           | 0          |
> >| Com_begin                  | 0          |
> >| Com_change_db              | 154039613  |
> >| Com_change_master          | 0          |
> >| Com_check                  | 0          |
> >| Com_checksum               | 0          |
> >| Com_commit                 | 0          |
> >| Com_create_db              | 0          |
> >| Com_create_function        | 0          |
> >| Com_create_index           | 0          |
> >| Com_create_table           | 26         |
> >| Com_dealloc_sql            | 0          |
> >| Com_delete                 | 15447773   |
> >| Com_delete_multi           | 0          |
> >| Com_do                     | 0          |
> >| Com_drop_db                | 0          |
> >| Com_drop_function          | 0          |
> >| Com_drop_index             | 0          |
> >| Com_drop_table             | 27         |
> >| Com_drop_user              | 0          |
> >| Com_execute_sql            | 0          |
> >| Com_flush                  | 2          |
> >| Com_grant                  | 0          |
> >| Com_ha_close               | 0          |
> >| Com_ha_open                | 0          |
> >| Com_ha_read                | 0          |
> >| Com_help                   | 0          |
> >| Com_insert                 | 10401852   |
> >| Com_insert_select          | 136718     |
> >| Com_kill                   | 0          |
> >| Com_load                   | 0          |
> >| Com_load_master_data       | 0          |
> >| Com_load_master_table      | 0          |
> >| Com_lock_tables            | 1          |
> >| Com_optimize               | 2          |
> >| Com_preload_keys           | 0          |
> >| Com_prepare_sql            | 0          |
> >| Com_purge                  | 0          |
> >| Com_purge_before_date      | 0          |
> >| Com_rename_table           | 1          |
> >| Com_repair                 | 3          |
> >| Com_replace                | 4126896    |
> >| Com_replace_select         | 18322588   |
> >| Com_reset                  | 0          |
> >| Com_restore_table          | 0          |
> >| Com_revoke                 | 0          |
> >| Com_revoke_all             | 0          |
> >| Com_rollback               | 0          |
> >| Com_savepoint              | 0          |
> >| Com_select                 | 573190719  |
> >| Com_set_option             | 1181       |
> >| Com_show_binlog_events     | 0          |
> >| Com_show_binlogs           | 0          |
> >| Com_show_charsets          | 0          |
> >| Com_show_collations        | 0          |
> >| Com_show_column_types      | 0          |
> >| Com_show_create_db         | 1          |
> >| Com_show_create_table      | 8          |
> >| Com_show_databases         | 10499      |
> >| Com_show_errors            | 0          |
> >| Com_show_fields            | 2540       |
> >| Com_show_grants            | 0          |
> >| Com_show_innodb_status     | 0          |
> >| Com_show_keys              | 2          |
> >| Com_show_logs              | 0          |
> >| Com_show_master_status     | 0          |
> >| Com_show_new_master        | 0          |
> >| Com_show_open_tables       | 0          |
> >| Com_show_privileges        | 0          |
> >| Com_show_processlist       | 24         |
> >| Com_show_slave_hosts       | 0          |
> >| Com_show_slave_status      | 21192      |
> >| Com_show_status            | 23851      |
> >| Com_show_storage_engines   | 0          |
> >| Com_show_tables            | 64075      |
> >| Com_show_variables         | 6          |
> >| Com_show_warnings          | 0          |
> >| Com_slave_start            | 12         |
> >| Com_slave_stop             | 0          |
> >| Com_truncate               | 100        |
> >| Com_unlock_tables          | 1          |
> >| Com_update                 | 833306826  |
> >| Com_update_multi           | 0          |
> >| Connections                | 153975605  |
> >| Created_tmp_disk_tables    | 16         |
> >| Created_tmp_files          | 1544309    |
> >| Created_tmp_tables         | 11011061   |
> >| Delayed_errors             | 0          |
> >| Delayed_insert_threads     | 0          |
> >| Delayed_writes             | 0          |
> >| Flush_commands             | 2          |
> >| Handler_commit             | 45         |
> >| Handler_delete             | 395252     |
> >| Handler_discover           | 0          |
> >| Handler_read_first         | 191695     |
> >| Handler_read_key           | 717659723  |
> >| Handler_read_next          | 1440309480 |
> >| Handler_read_prev          | 0          |
> >| Handler_read_rnd           | 1055091498 |
> >| Handler_read_rnd_next      | 2185842449 |
> >| Handler_rollback           | 133982982  |
> >| Handler_update             | 9610342    |
> >| Handler_write              | 1511376494 |
> >| Key_blocks_not_flushed     | 0          |
> >| Key_blocks_unused          | 56612      |
> >| Key_blocks_used            | 153316     |
> >| Key_read_requests          | 1615349579 |
> >| Key_reads                  | 320440     |
> >| Key_write_requests         | 40643476   |
> >| Key_writes                 | 21199977   |
> >| Max_used_connections       | 955        |
> >| Not_flushed_delayed_rows   | 0          |
> >| Open_files                 | 101        |
> >| Open_streams               | 0          |
> >| Open_tables                | 345        |
> >| Opened_tables              | 1637       |
> >| Qcache_free_blocks         | 1289       |
> >| Qcache_free_memory         | 31947024   |
> >| Qcache_hits                | 3002872    |
> >| Qcache_inserts             | 181537     |
> >| Qcache_lowmem_prunes       | 150945     |
> >| Qcache_not_cached          | 573396839  |
> >| Qcache_queries_in_cache    | 788        |
> >| Qcache_total_blocks        | 2935       |
> >| Questions                  | 1766422261 |
> >| Rpl_status                 | NULL       |
> >| Select_full_join           | 137        |
> >| Select_full_range_join     | 0          |
> >| Select_range               | 1139287    |
> >| Select_range_check         | 0          |
> >| Select_scan                | 2550       |
> >| Slave_open_temp_tables     | 0          |
> >| Slave_running              | ON         |
> >| Slave_retried_transactions | 0          |
> >| Slow_launch_threads        | 0          |
> >| Slow_queries               | 1019       |
> >| Sort_merge_passes          | 150        |
> >| Sort_range                 | 2393850    |
> >| Sort_rows                  | 1694680796 |
> >| Sort_scan                  | 10551731   |
> >| Table_locks_immediate      | 1489264630 |
> >| Table_locks_waited         | 4822       |
> >| Threads_cached             | 127        |
> >| Threads_connected          | 1          |
> >| Threads_created            | 7558       |
> >| Threads_running            | 1          |
> >| Uptime                     | 3593626    |
> >+----------------------------+------------+
> >157 rows in set (0.01 sec)
> >)
> >
> >my.cnf:
> >
> ># The MySQL server
> >[mysqld]
> >old-passwords
> >skip-locking
> >port                    = 3306
> >socket                  = /var/lib/mysql/mysql.sock
> >key_buffer              = 190M
> >max_allowed_packet      = 16M
> >table_cache             = 1600
> >sort_buffer_size        = 4M
> >read_buffer_size        = 256K
> >myisam_sort_buffer_size = 4M
> >thread_cache            = 128
> >ft_min_word_len         = 3
> >tmp_table_size          = 32M
> >
> >
> ># Query Cache Settings - OFF due to overload of Session table
> >query_cache_size = 32M
> >query_cache_type = 2
> >
> >
> >
> ># Log queries taking longer than "long_query_time" seconds
> >long_query_time = 4
> >log-slow-queries = /var/lib/mysql/slow-queries.log
> >log-error = /var/lib/mysql/mysqld.err
> >
> >
> ># Try number of CPU's*2 for thread_concurrency
> >thread_concurrency = 16
> >
> >interactive_timeout = 28800
> >wait_timeout = 30
> >
> >max_connections         = 1947
> >max_connect_errors      = 128
> >
> ># Uncomment the following if you are using InnoDB tables
> >innodb_data_home_dir = /var/lib/mysql/
> >innodb_data_file_path = ibdata1:2000M;ibdata2:2000M;ibdata3:2000M
> >innodb_log_group_home_dir = /var/lib/mysql/
> >innodb_log_arch_dir = /var/lib/mysql/
> >
> ># You can set .._buffer_pool_size up to 50 - 80 %
> ># of RAM but beware of setting memory usage too high
> >innodb_buffer_pool_size = 2000M
> >innodb_additional_mem_pool_size = 32M
> >
> ># Set .._log_file_size to 25 % of buffer pool size
> >innodb_log_file_size = 128M
> >innodb_log_buffer_size = 32M
> >innodb_flush_log_at_trx_commit = 0
> >innodb_lock_wait_timeout = 50
> >innodb_thread_concurrency = 16
> >innodb_file_io_threads = 4
> >innodb_table_locks = 0
> >
> >
> >-Sheeri
> >
> >
> >
> Once about 1/3 of the data matches, it is quicker to not use the index.
> This date seems to be the threshold.
>
>

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to