当前位置: 首页 > news >正文

91色做爰免费网站网站affiliate怎么做

91色做爰免费网站,网站affiliate怎么做,网站的二级目录是什么,苏州有什么好玩的本篇文章介绍mysql基于成本选择索引的行为#xff0c;解释为什么有时候明明可以走索引#xff0c;但mysql却没有走索引的原因 mysql索引失效的场景大致有几种 不符合最左前缀原则在索引列上使用函数或隐式类型转换使用like查询#xff0c;如 %xxx回表代价太大索引列区分度过… 本篇文章介绍mysql基于成本选择索引的行为解释为什么有时候明明可以走索引但mysql却没有走索引的原因 mysql索引失效的场景大致有几种 不符合最左前缀原则在索引列上使用函数或隐式类型转换使用like查询如 %xxx回表代价太大索引列区分度过低数据量少没有走索引的必要in中的条件过多 其中前三种失效场景是因为无法利用索引的有序性。而后面几种场景则是Mysql从成本上考虑认为走索引的代价比不走索引的代价高因此Mysql没有走索引。 同样的如果我们一个查询可以利用多个索引那么mysql最终会走哪个索引呢这也是基于成本考虑的哪个索引的成本更低就使用哪个索引。 我们可以来做个实验。创建一个person表该表有一个主键索引一个联合索引以及一个create_time索引。 CREATE TABLE person (id bigint NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,score int NOT NULL,create_time timestamp NOT NULL,PRIMARY KEY (id) USING BTREE,INDEX name_score(name, score) USING BTREE,INDEX create_time(create_time) USING BTREE ) ENGINE InnoDB AUTO_INCREMENT 100000 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ROW_FORMAT Dynamic;通过下面的存储过程循环创建 10 万条测试数据。 CREATE DEFINERroot% PROCEDURE insert_person() begindeclare c_id integer default 1;while c_id100000 doinsert into person values(c_id, concat(name,c_id), c_id100, date_sub(NOW(), interval c_id second));set c_idc_id1;end while; end接下来查看下面语句的执行计划。从执行计划中可以看出该sql可能走name_score和create_time俩个索引。但最终mysql选择的确实全表扫描 EXPLAIN SELECT * FROM person WHERE NAME name84059 AND create_time2023-09-05 05:00:00我们查询条件的时间从5点修改成22点在查看执行计划发现此时走了create_time索引。 EXPLAIN SELECT * FROM person WHERE NAME name84059 AND create_time2023-09-05 22:00:00同一条sql不同的查询条件mysql会根据计算的成本选择走或不走索引。这里的成本主要包括IO成本和CPU成本 IO 成本是从磁盘把数据加载到内存的成本。CPU 成本是检测数据是否满足条件和排序等 CPU 操作的成本。 我们仔细看上面俩个执行计划的rows列可以很明显的发现第二个执行计划的rows小得多也就是说要扫描的行更小CPU的成本也就会更小所以mysql选择了走索引。 在Mysql5.6及之后的版本中我们还可以使用optimizer trace功能查看每个索引、全表扫描具体的成本是多少从而知道mysql为什么选这个索引或为什么走全表扫描。 如下代码所示打开 optimizer_trace 后再执行 SQL 就可以查询 information_schema.OPTIMIZER_TRACE 表查看执行计划了最后可以关闭 optimizer_trace 功能 SET optimizer_traceenabledon; SELECT * FROM person WHERE NAME name84059 AND create_time2023-09-05 05:00:00; SELECT * FROM information_schema.OPTIMIZER_TRACE; SET optimizer_traceenabledoff;OPTIMIZER_TRACE部分片段如下 analyzing_range_alternatives: {range_scan_alternatives: [{index: name_score,ranges: [name84059 name],index_dives_for_eq_ranges: true,rowid_ordered: false,using_mrr: false,index_only: false,rows: 25362,cost: 27618.4, #走name_score索引需要花费的成本chosen: false, #没有选择name_score索引cause: cost},{index: create_time,ranges: [0x64f64550 create_time],index_dives_for_eq_ranges: true,rowid_ordered: false,using_mrr: false,index_only: false,rows: 46320, #走create_time索引需要花费的成本cost: 50440.2, #没有选择create_time索引chosen: false,cause: cost}]} {considered_execution_plans: [{plan_prefix: [],table: person,best_access_path: {considered_access_paths: [{rows_to_scan: 92641,access_type: scan, #走全表花费的成本resulting_rows: 92641,cost: 9549.9,chosen: true}]},condition_filtering_pct: 100,rows_for_plan: 92641,cost_for_plan: 9549.9,chosen: true}]}从optimizer_trace中我们可以看出name_score索引、create_time索引、全表扫描的成本分别是27618.4、50440.2、9549.9所以mysql最终选择了全表扫描。 有时候mysql也可能会选错索引此时我们可以通过FORCE INDEX强制mysql走索引如 SELECT * FROM person FORCE INDEX(create_time) WHERE NAME name84059 AND create_time2023-09-05 05:00:00当然实际上并不建议使用FORCE INDEX因为mysql的选择往往会更正确
http://www.w-s-a.com/news/786519/

相关文章:

  • 国际婚恋网站做翻译合法吗南宁网络推广有限公司
  • 济南做网站公司排名销售市场规划方案
  • 营销型网站定制珠海建站网站
  • 企业网站代码wordpress页面重定向循环
  • 厦门网站建设哪家便宜用wordpress做企业网站
  • 网站备案有幕布python 做网站速度
  • 旅游网站模板psd网站后台维护主要做什么
  • 晋江做任务的网站网站如何设置关键词
  • 呼伦贝尔网站建设呼伦贝尔ps网页设计心得体会
  • 字母logo设计网站动画设计方案及内容
  • 怎样做网站建设方案wordpress 附件预览
  • 网站内容编辑wordpress cron原理
  • 户外商品网站制作建筑网络图片
  • 注册了网站怎么建设做网站是学什么专业
  • 济南建设网站哪里好网站色哦优化8888
  • 什么网站做简历最好外贸公司网站大全
  • 衡水网站托管企业二级网站怎么做
  • 丹阳网站建设公司旅游类网站开发开题报告范文
  • 地方门户网站建设苏州网站优化建设
  • 谁用fun域名做网站了网络营销的三种方式
  • 织梦网站上传天津网站建设电话咨询
  • 论坛网站搭建深圳网
  • 天津建立网站营销设计window7用jsp做的网站要什么工具
  • 英文网站wordpress所有图片
  • 我做的网站怎么打开很慢网络营销典型企业
  • 新增备案网站python3网站开发
  • 诊断网站seo现状的方法与通信工程专业做项目的网站
  • 南京 微网站 建站alexa排名查询统计
  • 天津网站建设企业系统wordpress已发布不显示不出来
  • 大连网站前端制作公司局域网视频网站建设