MySQL优化之联合索引
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,1.表结构(root@localhost) [test]> show create table t_demo\G;*************************** 1. row ********
千家信息网最后更新 2025年11月08日MySQL优化之联合索引
1.表结构
(root@localhost) [test]> show create table t_demo\G;*************************** 1. row *************************** Table: t_demoCreate Table: CREATE TABLE `t_demo` ( `vin` varchar(17) NOT NULL DEFAULT '' COMMENT '底盘号', `lng` decimal(10,6) DEFAULT NULL COMMENT 'GPS经度', `lat` decimal(10,6) DEFAULT NULL COMMENT 'GPS纬度', `gps_time` datetime DEFAULT NULL, `crmkey` char(36) DEFAULT NULL , `veh_model_desc` varchar(30) DEFAULT NULL , `veh_series_desc` varchar(30) DEFAULT NULL , `update_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' , PRIMARY KEY (`vin`,`update_time`), KEY `idx_crmkey` (`crmkey`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*!50100 PARTITION BY RANGE (to_days(update_time))(PARTITION p20160724 VALUES LESS THAN (736535) ENGINE = InnoDB, PARTITION p20160725_0731 VALUES LESS THAN (736542) ENGINE = InnoDB, PARTITION p20160801_0807 VALUES LESS THAN (736549) ENGINE = InnoDB, PARTITION p20160808_0814 VALUES LESS THAN (736556) ENGINE = InnoDB, PARTITION p20160815_0821 VALUES LESS THAN (736563) ENGINE = InnoDB, PARTITION p20160822_0828 VALUES LESS THAN (736570) ENGINE = InnoDB, PARTITION p20160829_0904 VALUES LESS THAN (736577) ENGINE = InnoDB, PARTITION p20160905_0911 VALUES LESS THAN (736584) ENGINE = InnoDB, PARTITION p20160912_0918 VALUES LESS THAN (736591) ENGINE = InnoDB, PARTITION p20160919_0925 VALUES LESS THAN (736598) ENGINE = InnoDB, PARTITION p20160926_1002 VALUES LESS THAN (736605) ENGINE = InnoDB, PARTITION p20161003_1009 VALUES LESS THAN (736612) ENGINE = InnoDB, PARTITION p20161010_1016 VALUES LESS THAN (736619) ENGINE = InnoDB, PARTITION p20161017_1023 VALUES LESS THAN (736626) ENGINE = InnoDB, PARTITION p20161024_1030 VALUES LESS THAN (736633) ENGINE = InnoDB, PARTITION p20161031_1106 VALUES LESS THAN (736640) ENGINE = InnoDB, PARTITION p20161107_1113 VALUES LESS THAN (736647) ENGINE = InnoDB, PARTITION p20161114_1120 VALUES LESS THAN (736654) ENGINE = InnoDB, PARTITION p20161121_1127 VALUES LESS THAN (736661) ENGINE = InnoDB, PARTITION p20161128_1204 VALUES LESS THAN (736668) ENGINE = InnoDB, PARTITION p20161205_1211 VALUES LESS THAN (736675) ENGINE = InnoDB, PARTITION p20161212_1218 VALUES LESS THAN (736682) ENGINE = InnoDB, PARTITION p20161219_1225 VALUES LESS THAN (736789) ENGINE = InnoDB, PARTITION p20161226_170101 VALUES LESS THAN (736796) ENGINE = InnoDB) */1 row in set (0.00 sec)2.查看执行计划
(root@localhost) [test]> explain partitions SELECT COUNT(1) -> FROM t_demo tvghg -> WHERE tvghg.crmkey ='cf71ea00-65ff-4521-b336-fdc13846e2e2' -> AND tvghg.update_time >= '2016-07-19 06:00:00' -> AND tvghg.update_time < '2016-07-19 07:00:00' -> AND (tvghg.veh_series_desc IN ( 'A6', 'A6L'));+----+-------------+-------+------------+------+---------------+------------+---------+-------+---------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+------------+------+---------------+------------+---------+-------+---------+-------------+| 1 | SIMPLE | tvghg | p20160724 | ref | idx_crmkey | idx_crmkey | 109 | const | 1961366 | Using where |+----+-------------+-------+------------+------+---------------+------------+---------+-------+---------+-------------+1 row in set (0.00 sec)3.查看选择率
(root@localhost) [test]> select count(distinct(crmkey))/count(*) AS selectivity1,count(distinct(update_time))/count(*) AS selectivity2, count(distinct(veh_series_desc))/count(*) AS selectivity3 from t_demo;+--------------+--------------+--------------+| selectivity1 | selectivity2 | selectivity3 |+--------------+--------------+--------------+| 0.0001 | 0.0000 | 0.0000 |+--------------+--------------+--------------+1 row in set (43.95 sec)select count(distinct(concat(crmkey,update_time)))/count(*) from t_demo;+------------------------------------------------------+| count(distinct(concat(crmkey,update_time)))/count(*) |+------------------------------------------------------+| 0.0136 |+------------------------------------------------------+1 row in set (52.66 sec)4.查询时间(root@localhost) [test]> SELECT COUNT(1) -> FROM t_demo tvghg -> WHERE tvghg.crmkey ='cf71ea00-65ff-4521-b336-fdc13846e2e2' -> AND tvghg.update_time >= '2016-07-19 06:00:00' -> AND tvghg.update_time < '2016-07-19 07:00:00' -> AND (tvghg.veh_series_desc IN ( 'A6', 'A6L'));+----------+| COUNT(1) |+----------+| 2695 |+----------+1 row in set (3.67 sec)这里考虑索引怎么创建,涉及到多个字段,需要我们去做判断,查看选择率是我们创建索引的一个很重要的参考。这里的表是一个分区表,按照时间做的分区,查询字段里也包含时间字段,索引创建索引我们肯定要有时间字段的哦。
5.创建索引
(root@localhost) [(none)]> create index idx_tvghg_crmkey_update_time on `test`.`t_demo`(crmkey,update_time);Query OK, 0 rows affected (4 min 40.21 sec)Records: 0 Duplicates: 0 Warnings: 0(root@localhost) [test]> alter table `test`.`t_demo` drop index idx_crmkey;Query OK, 0 rows affected (1.16 sec)Records: 0 Duplicates: 0 Warnings: 06.查询,查看执行计划
SELECT COUNT(1) FROM t_demo tvghg WHERE tvghg.crmkey ='cf71ea00-65ff-4521-b336-fdc13846e2e2' AND tvghg.update_time >= '2016-07-19 06:00:00' AND tvghg.update_time < '2016-07-19 07:00:00' AND (tvghg.veh_series_desc IN ( 'A6', 'A6L'));+----------+| COUNT(1) |+----------+| 2695 |+----------+1 row in set (0.03 sec)(root@localhost) [test]> explain partitions SELECT COUNT(1) -> FROM t_demo tvghg -> WHERE tvghg.crmkey ='cf71ea00-65ff-4521-b336-fdc13846e2e2' -> AND tvghg.update_time >= '2016-07-19 06:00:00' -> AND tvghg.update_time < '2016-07-19 07:00:00' -> AND (tvghg.veh_series_desc IN ( 'A6', 'A6L'));+----+-------------+-------+------------+-------+------------------------------+------------------------------+---------+------+-------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+------------+-------+------------------------------+------------------------------+---------+------+-------+-------------+| 1 | SIMPLE | tvghg | p20160724 | range | idx_tvghg_crmkey_update_time | idx_tvghg_crmkey_update_time | 114 | NULL | 12446 | Using where |+----+-------------+-------+------------+-------+------------------------------+------------------------------+---------+------+-------+-------------+创建索引绝对是一个技术活,在尽量占用少的磁盘空间,创建出合理的索引,还是要多了解业务,知己知彼。在上线前评估好,真的上线了,创建索引对系统也会有不小的影响。
索引
字段
时间
查询
选择
重要
知己知彼
业务
多个
底盘
技术
技术活
知己
磁盘
空间
系统
纬度
经度
结构
还是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
青岛天驰网络技术有限公司
服务器显卡供电功耗
上海招聘单片机软件开发
杭州制造软件开发工程师
华测导航数据采集数据库
全密闭服务器配液冷
中国股市网络安全板块
如何在云端建立数据库
web服务器架设和管理
网络安全作文320
每个学校的知网数据库是一样的吗
android数据库优化
数据库技术实验报告图文
我的世界服务器方块移动指令
数据库导入文件的权限
网络安全班会主题图片
崇明区先进软件开发项目信息
江西省网络技术选哪所学校
服务器怎么复制应用
微信软件开发创始人
社区网络技术
新一代无线通信及网络技术论文
当前国内的网络安全状况
嘉兴智令软件开发有限公司
网络安全测试论文
网络安全 被动防御
软件开发599.99啥意思
自选学位论文数据库名称
葫芦岛学习软件开发
网络安全肉鸡是指