电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL索引失效十種場景與優化方案

瀏覽:189日期:2023-05-08 10:17:46
目錄
  • 1 數據準備
    • 1.1 新建數據表
    • 1.2 新增100萬條數據
  • 2 基礎知識
    • 2.1 explain type
    • 2.2 explain Extra
  • 3 索引失效場景
    • 3.1 查詢類型錯誤
      • 3.1.1 失效場景
      • 3.1.2 解決方案
    • 3.2 索引列參與運算
      • 3.2.1 失效場景
      • 3.2.2 解決方案
    • 3.3 MySQL放棄使用索引
      • 3.3.1 失效場景
      • 3.3.2 解決方案一
      • 3.3.3 解決方案二
    • 3.4 錯誤使用通配符
      • 3.4.1 數據準備
      • 3.4.2 失效場景一
      • 3.4.3 失效場景二
      • 3.4.4 解決方案
    • 3.5 OR連接無索引字段
      • 3.5.1 失效場景
      • 3.5.2 解決方案
    • 3.6 未用到覆蓋索引
      • 3.6.1 失效場景
      • 3.6.2 解決方案
    • 3.7 聯合索引失效
      • 3.7.1 完整使用
      • 3.7.2 失效場景一:索引不完整
      • 3.7.3 失效場景二:索引中斷
      • 3.7.4 失效場景三:非等值匹配
      • 3.7.5 失效場景四:最左索引缺失
  • 4 文章總結

    1 數據準備

    1.1 新建數據表

    CREATE TABLE `player` (  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT "主鍵",  `player_id` varchar(256) NOT NULL COMMENT "運動員編號",  `player_name` varchar(256) NOT NULL COMMENT "運動員名稱",  `height` int(11) NOT NULL COMMENT "身高",  `weight` int(11) NOT NULL COMMENT "體重",  `type` varchar(256) DEFAULT "0" COMMENT "球員類型",  `game_performance` text COMMENT "最近一場比賽表現",  PRIMARY KEY (`id`),  KEY `idx_name_height_weight` (`player_name`,`height`,`weight`),  KEY `idx_type` (`type`),  KEY `idx_height` (`height`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

    以上數據表聲明三個索引:

    • 聯合索引:idx_name_height_weight
    • 普通索引:idx_type
    • 普通索引:idx_height

    1.2 新增100萬條數據

    @SpringBootTest(classes = TestApplication.class)@RunWith(SpringJUnit4ClassRunner.class)public class PlayerServiceTest {    @Resource    private PlayerRepository playerRepository;    @Test    public void initBigData() {for (int i = 0; i < 1000000; i++) {    PlayerEntity entity = new PlayerEntity();    entity.setPlayerId(UUID.randomUUID().toString());    entity.setPlayerName("球員_" + System.currentTimeMillis());    entity.setType("0");    entity.setWeight(150);    entity.setHeight(188);    entity.setGamePerformance("{\"runDistance\":8900.0,\"passSuccess\":80.12,\"scoreNum\":3}");    playerRepository.insert(entity);}    }}

    2 基礎知識

    2.1 explain type

    執行計劃中訪問類型是重要分析指標:

    2.2 explain Extra

    Extra表示執行計劃擴展信息:

    3 索引失效場景

    本章節介紹索引失效十種場景:

    • 查詢類型錯誤
    • 索引列參與運算
    • 錯誤使用通配符
    • 未用到覆蓋索引
    • OR連接無索引字段
    • MySQL放棄使用索引
    • 聯合索引失效
      • 索引不完整
      • 索引中斷
      • 非等值匹配
      • 最左索引缺失

    3.1 查詢類型錯誤

    3.1.1 失效場景

    explain select * from player where type = 0

    3.1.2 解決方案

    數據表定義type字段為varchar類型,查詢必須使用相同類型:

    3.2 索引列參與運算

    3.2.1 失效場景

    explain select * from player where height + 1 > 189

    3.2.2 解決方案

    explain select * from player where height > 188

    3.3 MySQL放棄使用索引

    3.3.1 失效場景

    MySQL發現如果使用索引性能低于全表掃描則放棄使用索引。例如在表中100萬條數據height字段值全部是188,所以執行如下語句時放棄使用索引:

    explain select * from player where height > 187

    3.3.2 解決方案一

    調整查詢條件值:

    explain select * from player where height > 188

    3.3.3 解決方案二

    強制指定索引,這種方法不一定可以提升性能:

    3.4 錯誤使用通配符

    3.4.1 數據準備

    避免出現3.3章節失效問題此處修改一條數據:

    update player set player_name = "測試球員" where id = 1

    3.4.2 失效場景一

    explain select * from player where player_name like "%測試"

    3.4.3 失效場景二

    explain select * from player where player_name like "%測試%"

    3.4.4 解決方案

    explain select * from player where player_name like "測試%"

    3.5 OR連接無索引字段

    3.5.1 失效場景

    type有索引,weight無索引:

    explain select * from player where type = "0" or weight = 150

    3.5.2 解決方案

    weight新增索引,union拼裝查詢數據

    explainselect * from player where type = "0" unionselect * from player where weight = 150

    3.6 未用到覆蓋索引

    3.6.1 失效場景

    Using index condition表示使用索引,但是需要回表查詢

    explain select * from player where player_name like "測試%"

    3.6.2 解決方案

    覆蓋索引含義是查詢時索引列完全包含查詢列,查詢過程無須回表(需要在同一棵索引樹)性能得到提升。Using Index; Using where表示使用覆蓋索引并且用where過濾查詢結果:

    explain select id,player_name,height,weight from player where player_name like "測試%"

    3.7 聯合索引失效

    3.7.1 完整使用

    聯合索引idx_name_height_weight完整使用key_len=778:

    explain select * from player where player_name = "球員_1682577684751" and height = 188 and weight = 150

    3.7.2 失效場景一:索引不完整

    weight不在查詢條件,所以只用到idx_name_height,所以key_len= 774:

    explain select * from player where player_name = "球員_1682577684751" and height = 188

    3.7.3 失效場景二:索引中斷

    height不在查詢條件,所以只用到idx_name,所以key_len= 770:

    explain select * from player where player_name = "球員_1682577684751" and weight = 150

    3.7.4 失效場景三:非等值匹配

    height非等值匹配,所以只用到idx_name_height,所以key_length=774:

    explain select * from player where player_name="球員_1682577684751" and height > 188 and weight = 150

    3.7.5 失效場景四:最左索引缺失

    player_name最左索引不在查詢條件,全表掃描

    explain select * from player where weight = 150

    4 文章總結

    本文第一進行測試數據準備,第二介紹執行計劃相關知識,第三介紹索引失效10種場景:查詢類型錯誤,索引列參與運算,錯誤使用通配符,未用到覆蓋索引,OR連接無索引字段,MySQL放棄使用索引,聯合索引中索引不完整,索引中斷,非等值匹配,最左索引缺失。

    以上就是MySQL索引失效十種場景與優化方案的詳細內容,更多關于MySQL索引失效的資料請關注其它相關文章!

    標簽: MySQL
    相關文章:
    主站蜘蛛池模板: 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 | 河南中专学校|职高|技校招生-河南中职中专网 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | 密封无忧网 _ 专业的密封产品行业信息网 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 上海网站建设-上海网站制作-上海网站设计-上海做网站公司-咏熠软件 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 技德应用| 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 环比机械| 济南菜鸟驿站广告|青岛快递车车体|社区媒体-抖音|墙体广告-山东揽胜广告传媒有限公司 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 飞象网 - 通信人每天必上的网站 全球化工设备网—化工设备,化工机械,制药设备,环保设备的专业网络市场。 | 电动不锈钢套筒阀-球面偏置气动钟阀-三通换向阀止回阀-永嘉鸿宇阀门有限公司 | 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 尊享蟹太太美味,大闸蟹礼卡|礼券|礼盒在线预订-蟹太太官网 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 |