资源描述:
《mysql innodb 查询优化实现分析专业版》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MysqlInnodb查询优化实现分析以下文字由808影视www.808ys.com收集提供于影视网何登成目录1目地22测试准备23单表查询33.1单表range查询33.1.1records_in_range函数分析53.1.2best_access_path函数(单表)63.1.3单表range查询总结83.2单表unique查询93.2.1单表Unique查询总结94多表查询104.1多表简单join104.2best_access_path函数分析124.2.1总流程分析124.2.2代价估计分析124.2.3best_access_path函数
2、流程134.3optimizer_search_depth参数154.4多表join查询总结155统计信息165.1统计信息收集165.2统计信息更新175.3统计信息收集总结186查询优化总结187参考文献18附录一19附录二20附录三21附录四221目地分析mysql+innodb如何实现查询优化?实现查询优化,存储引擎需要做哪些方面地配合?2测试准备mysqlselectversion();5.1.49-debug-loginnodb--------表定义---------+-------+-----------------------------
3、-
4、Table
5、CreateTable+-------+------------------------------
6、nkeys
7、CREATETABLE`nkeys`(`c1`int(11)NOTNULL,`c2`int(11)DEFAULTNULL,`c3`int(11)DEFAULTNULL,`c4`int(11)DEFAULTNULL,`c5`int(11)DEFAULTNULL,PRIMARYKEY(`c1`),UNIQUEKEY`c2`(`c2`),UNIQUEKEY`c3`(`c3`),UNIQUEKEY`c4`(`c4`),KEY`nkey
8、1`(`c3`,`c5`))ENGINE=InnoDBDEFAULTCHARSET=gbk
9、+-------+----------------------------------数据----insertintonkeysvalues(1,1,1,1,1);insertintonkeysvalues(2,2,2,2,2);insertintonkeysvalues(3,3,3,3,3);insertintonkeysvalues(4,4,4,4,4);insertintonkeysvalues(5,5,5,5,5);1单表查询1.1单表range查询1)s
10、elect*fromnkeyswherec3>3;不能进行索引覆盖扫描indexrangescan2)selectc3fromnkeyswherec3>3;可以进行索引覆盖扫描indexonlyrangescan调用流程:msyql_select->JOIN::optimize->make_join_statistics->0.sql_select.cc::get_quick_record_count->opt_range.cc::SQL_SELECT::test_quick_select–>ha_innobase::scan_time->get_key
11、_scans_params->check_quick_select–>Opt_range.cc::check_quick_keys->ha_innobase::records_in_range->get_index_only_read_time->ha_innobase::read_time->get_best_ror_intersect->get_best_covering_ror_intersect->a)ha_innobase::scan_time函数,给出全表扫描read_timei.scan_time=(double)records/TIME_
12、FOR_COMPARE+1;1.mysql层面,返回一个record需要地时间(CPU时间)2.TIME_FOR_COMPARE=5ii.return(double)(prebuilt->table->stat_clustered_index_size(聚簇索引叶页面数);1.innodb层面,全表扫描时间,用读取地page数计算(IO时间)2.由于innodb是索引组织表,用不到page地预读,因此一次读取一个pageiii.table_read_time=ha_innobase::scan_time()+scan_time+1;1.全表扫描总时间=i
13、nnodb读取数据块时间+mysql比较记录时间+12.测试中:table_re