遇見的問題:30W查詢速度慢
mysql版本:5.7
內(nèi)存:1G
CPU:1核
mysql的一些配置:
innodb_buffer_pool_size:134217728 ( 128M)
key_buffer_size:16777216 ( 16M)
sort_buffer_size:720896(704K)
tmp_table_size:16M ? ? ? ? ? ? ? ? ? 默認為16M ? ? ? ?調(diào)到64-256最掛
max_connections:2532
查詢的SQL語句:
select count(*) as aggregate from `dtk_products` where `is_display` = 1 and `Cid` = 1 and `Quan_timestamp` > 1546411307 and `Quan_surplus` > 0
數(shù)據(jù)量:近30W
無條件統(tǒng)計:耗時542ms
未創(chuàng)建索引
使用以上SQL查詢(4個字段條件):執(zhí)行耗時14.6s
創(chuàng)建4個字段的單獨索引
is_display Cid Quan_timestamp Quan_surplus
執(zhí)行SQL統(tǒng)計:耗時12.5s
創(chuàng)建聯(lián)合索引
執(zhí)行SQL統(tǒng)計:耗時25.9s
通過圖7 和圖4的 索引情況對比柑土,不難發(fā)現(xiàn)较店,字段Quan_timestamp 和Quan_surplus的索引基數(shù)(Cardinality)差別很大肝箱。
結(jié)論:索引基數(shù)越高醇滥,查詢效率越高腮恩。聯(lián)合索引的索引基數(shù)比較大
PS:
耗時:148ms
數(shù)據(jù)量:308553
Explain SQL:結(jié)果如下 type=range ;key=4個字段的聯(lián)合索引
該表字段共37個,包含數(shù)據(jù)類型:int archer decimal timestamp