为什么MySQL 5.1.56中的MySQL查询速度如此之慢?
以下查询在MySQL 5.0.67中以0.3秒的时间执行,在MySQL 5.1.56中以3.0秒的时间执行。为什么在以后的版本中速度要慢十倍 (数据库从5.0.67导出并导入到5.1.56中,因此结构相同。) 5.1.61的产品表为什么MySQL 5.1.56中的MySQL查询速度如此之慢?,mysql,Mysql,以下查询在MySQL 5.0.67中以0.3秒的时间执行,在MySQL 5.1.56中以3.0秒的时间执行。为什么在以后的版本中速度要慢十倍 (数据库从5.0.67导出并导入到5.1.56中,因此结构相同。) 5.1.61的产品表 Action Keyname Type Unique Packed Column Cardinality Collation Null Comment Edit Drop PRIMARY BTREE Yes No produc
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment
Edit Drop PRIMARY BTREE Yes No product_id 493078 A
Edit Drop shop_id BTREE Yes No shop_id 0 A
link 493078 A
Edit Drop title_2 BTREE Yes No title 0 A
image 493078 A
Edit Drop brand BTREE No No brand 123269 A YES
Edit Drop title BTREE No No title 493078 A
Edit Drop date BTREE No No date 41089 A
Edit Drop shop_id_2 BTREE No No shop_id 12026 A
Edit Drop product_id BTREE No No product_id 493078 A
date 493078 A
Edit Drop shop_id_3 BTREE No No shop_id 12026 A
date 49307 A
Edit Drop sale_date BTREE No No sale_date 5940 A
商店表5.0.67
Keyname Type Cardinality Action Field
PRIMARY PRIMARY 502437 product_id
shop_id UNIQUE 502437 shop_id
link
title_2 UNIQUE 502437 title
image
brand INDEX 38649 brand
title INDEX 251218 title
date INDEX 125609 date
shop_id_2 INDEX 87 shop_id
product_id INDEX 502437 product_id
date
shop_id_3 INDEX 125609 shop_id
date
sale_date INDEX 187 sale_date
Keyname Type Cardinality Action Field
PRIMARY PRIMARY 163 shop_id
Keyname Type Cardinality Action Field
product_id_2 UNIQUE 506094 product_id
sex
product_id INDEX 506094 product_id
商店表5.161
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment
Edit Drop PRIMARY BTREE Yes No shop_id 163 A
5.0.67的性别表
Keyname Type Cardinality Action Field
PRIMARY PRIMARY 502437 product_id
shop_id UNIQUE 502437 shop_id
link
title_2 UNIQUE 502437 title
image
brand INDEX 38649 brand
title INDEX 251218 title
date INDEX 125609 date
shop_id_2 INDEX 87 shop_id
product_id INDEX 502437 product_id
date
shop_id_3 INDEX 125609 shop_id
date
sale_date INDEX 187 sale_date
Keyname Type Cardinality Action Field
PRIMARY PRIMARY 163 shop_id
Keyname Type Cardinality Action Field
product_id_2 UNIQUE 506094 product_id
sex
product_id INDEX 506094 product_id
5.1.61的性别表
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment
Edit Drop product_id_2 BTREE Yes No product_id 0 A
sex 496732 A
Edit Drop product_id BTREE No No product_id 496732 A
MySQL 5.1.61的my.cnf文件
[mysqladmin]
user=username
[mysqld]
basedir=/opt/bitnami/mysql
datadir=/opt/bitnami/mysql/data
port=3306
socket=/opt/bitnami/mysql/tmp/mysql.sock
tmpdir=/opt/bitnami/mysql/tmp
character-set-server=UTF8
collation-server=utf8_general_ci
max_allowed_packet=16M
wait_timeout = 120
long_query_time = 1
log_slow_queries
log_queries_not_using_indexes
query_cache_limit=2M
query_cache_type=1
query_cache_size=8M
innodb_additional_mem_pool_size=8M
innodb_buffer_pool_size=16M
#innodb_log_file_size=128M
#tmp_table_size=64M
#max_connections = 2500
#max_user_connections = 2500
#innodb_flush_method=O_DIRECT
#key_buffer_size=64M
[mysqld_safe]
mysqld=mysqld.bin
[client]
default-character-set=UTF8
port=3306
socket=/opt/bitnami/mysql/tmp/mysql.sock
[manager]
port=3306
socket=/opt/bitnami/mysql/tmp/mysql.sock
pid-file=/opt/bitnami/mysql/tmp/manager.pid
default-mysqld-path=/opt/bitnami/mysql/bin/mysqld.bin
我注意到,如果删除用于添加行号的外部查询,则时差将降至0.3秒,而不是0.7秒
SELECT shop, shops.shop_id AS
shop_id, p1.product_id AS product_id
FROM products p1
INNER JOIN sex ON
sex.product_id=p1.product_id AND
sex.sex=0 AND
sex.date >= (SUBDATE(NOW(),INTERVAL 7 DAY)) INNER JOIN
shops ON
shops.shop_id = p1.shop_id
ORDER BY shop
尝试使用索引(http://dev.mysql.com/doc/refman/5.1/en/index-hints.html)在中,以及尝试找到使用索引的正确顺序的经验。在大型查询中,mysql通常很难找到正确的索引来使用。新数据库中的一些索引显示基数0,而在旧数据库中,它们显示的值很大。这可能意味着新数据库对索引的效率有错误的认识。分析该表会更新关于该表所包含的值的信息,以便数据库知道要选择哪个索引 跑 每一张桌子。或者,可以使用单个命令分析所有表:
ANALYZE TABLE products, shops, ...
参考:索引导出/导入是否正确/完全正确?在DBs和Compare上运行
EXPLAIN SELECT…
是否使用相同的mysql.ini
文件?表类型是什么?InnoDb是较新版本中的默认值,而MyISAM以前是默认值。@MitchWheat感谢您提醒我添加了解释计划。
ANALYZE TABLE products, shops, ...