图中概念可参考https://blog.csdn.net/qq_36364521/article/details/121727899 中的mysql篇下的链接内容了解
整体架构: 1、链接层 2、server层 3、存储引擎层
通过sql查询配置信息: 分两类1、variables 2、status eg:1、show variables like ‘%query_cache%’ cache是否开启 2、show global status like ‘%Thread%’ 有多少链接
优化器: explain语句 explain format = json 可以查看更多,同时获得cost_info eg: explain format = json select * from business_a.monitor_app_a 得到结果: { “query_block”: { “select_id”: 1, “cost_info”: { “query_cost”: “5.00” }, “table”: { “table_name”: “monitor_app_a”, “access_type”: “ALL”, “rows_examined_per_scan”: 20, “rows_produced_per_join”: 20, “filtered”: “100.00”, “cost_info”: { “read_cost”: “1.00”, “eval_cost”: “4.00”, “prefix_cost”: “5.00”, “data_read_per_join”: “104K” }, “used_columns”: [ “id”, “app_name”, “aone_app_id”, “status”, “is_delete”, “create_time”, “create_user”, “update_time”, “update_user”, “domain_url” ] } } }
如果想打印每一个sql执行的计划可以: 1、开启 set optimizer_trace = ‘enabled=on’; 2、执行sql 略 3、select * from information_schema.OPTIMIZER_TRACE; 查看:https://blog.csdn.net/weixin_34192816/article/details/86082371 执行后得到:几个阶段数据:1、sql准备2、优化阶段3、执行阶段
mysql 主流的存储: MyISAM、innoDB、Memory、Archive、NDB
innoDB自适应hash索引 1.innodb本身的索引结构是B+tree,而hash索引是innodb存储引擎提供的特性功能 2.innodb存储引擎内部自己去监控索引表,如果监控到某个索引经常用,那么就认为是热数据,然后内部自己创建一个hash索引(只适用“=”的查询,对“in”“<=>”这些范围查询不适用) 3.创建了hash索引后,如果下次又查询到这个索引,那么直接通过hash算法推导出记录的地址,直接一次就能查到数据,比重复去B+tree索引中查询三四次节点的效率高了不少
buffer pool解决:预读取失效,缓存区污染
|