Hi Guys,
I'm having the same problem with SQL_CALC_FOUND_ROWS
Any query involving SQL_CALC_FOUND_ROWS takes ages!! All my tables are normalized, 
indexed, and optimized and the query uses the indices correctly.  Many people 
responded to my previous thread (when I though it was a fulltext issue only) and 
suggested multipling many of the buffers by 3 or 4 times the my-huge.cnf 
configuration... haven't seen much improvement.  
- See Variables listed below -

It just seems that its very easy to choke this server when SQL_CALC_FOUND_ROWS or 
COUNT(*) is used.  The number of rows is needed for pagination and to show the user 
the number of matches for a given category.

- See example below for a sample of the performance issues -

SETUP:
Running MySQL 4.0.20-standard-log                                                      
                                                                                       
                                                    Official MySQL RPM  
On Dual Xeon 2GHz with 2GB RAM, no slaves, no RAID
No other users connected.


VARIABLES:
SHOW VARIABLES;
+---------------------------------+------------------+
| Variable_name                   | Value                                              
                                                                                       
                                                                        |
+---------------------------------+------------------+                                 
                                                                                       
                                                                                  |
| binlog_cache_size               | 32768                                              
                                                                                       
                                                                        |
| bulk_insert_buffer_size         | 8388608                                            
                                                                                       
                                                                       
|
| concurrent_insert               | ON                                                 
                                                                                       
                                                                        |
| connect_timeout                 | 5                                                  
                                                                                       
                                                                        |
| convert_character_set           |                                                    
                                                                                       
                                                                        |
| datadir                         | /var/lib/mysql/                                    
                                                                                       
                                                                        |              
                                                                                       
                                                                                       
                   |
| delay_key_write                 | ON                                                 
                                                                                       
                                                                        |
| delayed_insert_limit            | 100                                                
                                                                                       
                                                                        |
| delayed_insert_timeout          | 300                                                
                                                                                       
                                                                        |
| delayed_queue_size              | 1000                                               
                                                                                       
                                                                        |
| flush                           | OFF                                                
                                                                                       
                                                                        |
| flush_time                      | 0                                                  
                                                                                       
                                                                        |
| ft_boolean_syntax               | + -><()~*:""&|                                     
                                                                                       
                                                                         |
| ft_min_word_len                 | 3                                                  
                                                                                       
                                                                        |
| ft_max_word_len                 | 254                                                
                                                                                       
                                                                        |
| ft_max_word_len_for_sort        | 20                                                 
                                                                                       
                                                                        |
| ft_stopword_file                | (built-in)                                         
                                                                                       
                                                                        |
| have_bdb                        | NO                                                 
                                                                                       
                                                                        |
| have_crypt                      | YES                                                
                                                                                       
                                                                        |
| have_innodb                     | YES                                                
                                                                                       
                                                                        |
| have_isam                       | YES                                                
                                                                                       
                                                                        |
| have_raid                       | NO                                                 
                                                                                       
                                                                        |
| have_symlink                    | YES                                                
                                                                                       
                                                                        |
| have_openssl                    | NO                                                 
                                                                                       
                                                                        |
| have_query_cache                | YES                                                
                                                                                       
                                                                                       
                                                                                       
                                                                                       
                   |
| ... innodb stuff...                                                                  
                                                                                       
                                                    |
| interactive_timeout             | 28800                                              
                                                                                       
                                                                        |
| join_buffer_size                | 258048                                             
                                                                                       
                                                                        |
| key_buffer_size                 | 943718400                                          
                                                                                       
                                                                        
|                                                                                      
                                                                                       
                                 |... stuff ...                                        
                                                                                       
                                                                    |
| max_allowed_packet              | 1047552                                            
                                                                                       
                                                                        |
| max_binlog_cache_size           | 4294967295                                         
                                                                                       
                                                                        |
| max_binlog_size                 | 1073741824                                         
                                                                                       
                                                                        |
| max_connections                 | 100                                                
                                                                                       
                                                                        |
| max_connect_errors              | 10                                                 
                                                                                       
                                                                        |
| max_delayed_threads             | 20                                                 
                                                                                       
                                                                        |
| max_insert_delayed_threads      | 20                                                 
                                                                                       
                                                                         |
| max_heap_table_size             | 67107840                                           
                                                                                       
                                                                         |
| max_join_size                   | 4294967295                                         
                                                                                       
                                                                        |
| max_relay_log_size              | 0                                                  
                                                                                       
                                                                        |
| max_seeks_for_key               | 4294967295                                         
                                                                                       
                                                                         |
| max_sort_length                 | 1024                                               
                                                                                       
                                                                        |
| max_user_connections            | 0                                                  
                                                                                       
                                                                        |
| max_tmp_tables                  | 32                                                 
                                                                                       
                                                                        |
| max_write_lock_count            | 4294967295                                         
                                                                                       
                                                                         |
| myisam_max_extra_sort_file_size | 268435456                                          
                                                                                       
                                                                        |
| myisam_max_sort_file_size       | 2147483647                                         
                                                                                       
                                                                        |
| myisam_repair_threads           | 1                                                  
                                                                                       
                                                                        |
| myisam_recover_options          | OFF                                                
                                                                                       
                                                                        |
| myisam_sort_buffer_size         | 268435456                                          
                                                                                       
                                                                        |
| net_buffer_length               | 16384                                              
                                                                                       
                                                                        |... stuff ... 
                                                                                       
                                                                                       
                               |
| protocol_version                | 10                                                 
                                                                                       
                                                                        |
| query_alloc_block_size          | 8192                                               
                                                                                       
                                                                        |
| query_cache_limit               | 2097152                                            
                                                                                       
                                                                        |
| query_cache_size                | 20971520                                           
                                                                                       
                                                                        |
| query_cache_type                | ON                                                 
                                                                                       
                                                                        |
| query_prealloc_size             | 8192                                               
                                                                                       
                                                                        |
| range_alloc_block_size          | 2048                                               
                                                                                       
                                                                        |
| read_buffer_size                | 16773120                                           
                                                                                       
                                                                        |
| read_only                       | OFF                                                
                                                                                       
                                                                        |
| read_rnd_buffer_size            | 262144                                             
                                                                                       
                                                                        |
| rpl_recovery_rank               | 0                                                  
                                                                                       
                                                                        |
| server_id                       | 1                                                  
                                                                                       
                                                                        |
| slave_net_timeout               | 3600                                               
                                                                                       
                                                                        |
| skip_external_locking           | ON                                                 
                                                                                       
                                                                        |
| skip_networking                 | OFF                                                
                                                                                       
                                                                        |
| skip_show_database              | OFF                                                
                                                                                       
                                                                        |
| slow_launch_time                | 2                                                  
                                                                                       
                                                                        |
| socket                          | /var/lib/mysql/mysql.sock                          
                                                                                       
                                                                        |
| sort_buffer_size                | 62914552                                           
                                                                                       
                                                                        |
| sql_mode                        | 0                                                  
                                                                                       
                                                                        |
| table_cache                     | 1024                                               
                                                                                       
                                                                        |
| table_type                      | MYISAM                                             
                                                                                       
                                                                        |
| thread_cache_size               | 32                                                 
                                                                                       
                                                                        |
| thread_stack                    | 126976                                             
                                                                                       
                                                                        |              
                                                                                       
                                                                                       
              |
| tmp_table_size                  | 239075328                                          
                                                                                       
                                                                        |
| tmpdir                          | /tmp/                                              
                                                                                       
                                                                        |
| transaction_alloc_block_size    | 8192                                               
                                                                                       
                                                                        |
| transaction_prealloc_size       | 4096                                               
                                                                                       
                                                                         |
| version                         | 4.0.20-standard-log                                
                                                                                       
                                                                        |
| version_comment                 | Official MySQL RPM                                 
                                                                                       
                                                                        |
| version_compile_os              | pc-linux                                           
                                                                                       
                                                                        |
| wait_timeout                    | 28800                                              
                                                                                       
                                                                        |

EXAMPLE:
- Here's an example using a FULLTEXT index just for simplicity since it only uses 1 
table.  However, I do have a few other queries where the SQL_CALC_FOUND_ROWS bogs it 
down consideribly.

mysql> SELECT product_id FROM product_fulltext WHERE MATCH(search_text) 
AGAINST('Blue') LIMIT 20;
+------------+
| product_id |
+------------+
|    3567602 |
|    1819473 |
|    3567549 |
|    3567449 |
|    3567609 |
|    3567529 |
|    3567604 |
|    3567607 |
|    3567606 |
|    3567408 |
|    3567605 |
|    3567603 |
|    3567600 |
|    3567601 |
|    3576159 |
|    3571258 |
|    3567625 |
|    3571547 |
|    3571265 |
|    3463427 |
+------------+
20 rows in set (0.36 sec)

mysql> SELECT SQL_CALC_FOUND_ROWS product_id FROM product_fulltext WHERE 
MATCH(search_text) AGAINST('Blue') LIMIT 20;
+------------+
| product_id |
+------------+
|    3567602 |
|    ... etc ..
|    3463427 |
+------------+
20 rows in set (1 min 4.84 sec)

mysql> EXPLAIN SELECT SQL_CALC_FOUND_ROWS product_id FROM product_fulltext WHERE 
MATCH(search_text) AGAINST('Blue') LIMIT 20;
+------------------+----------+---------------+-------------+---------+------+------+-------------+
| table            | type     | possible_keys | key         | key_len | ref  | rows | 
Extra       |
+------------------+----------+---------------+-------------+---------+------+------+-------------+
| product_fulltext | fulltext | search_text   | search_text |       0 |      |    1 | 
Using where |
+------------------+----------+---------------+-------------+---------+------+------+-------------+
1 row in set (0.02 sec)

mysql> DESCRIBE product_fulltext;
+-------------+--------+------+-----+---------+-------+
| Field       | Type   | Null | Key | Default | Extra |
+-------------+--------+------+-----+---------+-------+
| product_id  | int(9) |      | PRI | 0       |       |
| search_text | text   |      | MUL |         |       |
+-------------+--------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> SHOW INDEX FROM product_fulltext;
+------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table            | Non_unique | Key_name    | Seq_in_index | Column_name | Collation 
| Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| product_fulltext |          0 | PRIMARY     |            1 | product_id  | A         
|     3237981 |     NULL | NULL   |       | BTREE      |         |
| product_fulltext |          1 | search_text |            1 | search_text | A         
|     3237981 |     NULL | NULL   |      | FULLTEXT   |         |
+------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)

Thanks for any advice... I'm not much of a hardware or server guy.
- John

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

Reply via email to