范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

MySQL函数索引及优化

  很多开发人员在使用MySQL时经常会在部分列上进行函数计算等,导致无法走索引,在数据量大的时候,查询效率低下。针对此种情况本文从MySQL5.7 及MySQL8.0中分别进行不同方式的优化。  1、 MySQL5.7
  MySQL5.7版本中不支持函数索引,因此 遇到函数索引的时候需要进行修改,否则即使查询的字段上有索引,执行时也无法使用索引而进行全表扫描,数据量大的表查询时间会比较长。具体案例如下:  1.1 创建测试表及数据
  mysql> use testdb; Database changed mysql> create table   tb_function(id int primary key auto_increment,name  varchar(100),create_time datetime); Query OK, 0 rows affected (0.01 sec)  mysql> insert into  tb_function(name,creatE_time) values("anniuadaOAIFAPUHIA","2020-07-01 12:00:00"); Query OK, 1 row affected (0.02 sec)  mysql> insert into  tb_function(name,creatE_time) values("CWQSsar3qcssg","2020-07-01 15:00:00"); Query OK, 1 row affected (0.01 sec)  mysql> insert into  tb_function(name,creatE_time) values("vxfqrt2adafz","2020-07-01 21:30:00"); Query OK, 1 row affected (0.01 sec)  mysql> insert into  tb_function(name,creatE_time) values("etxzwrwbdhegqgaheqhag","2020-07-02 01:30:00"); Query OK, 1 row affected (0.01 sec)  mysql> insert into  tb_function(name,creatE_time) values("awrs433fsgvsfwtwg","2020-07-02 03:30:00"); Query OK, 1 row affected (0.00 sec)  mysql> insert into  tb_function(name,creatE_time) values("awrs433fsgvsfwtwg","2020-07-02 07:32:00"); Query OK, 1 row affected (0.00 sec)  mysql> insert into  tb_function(name,creatE_time) values("awrs433fsgvsfwtwg","2020-07-02 10:32:00"); Query OK, 1 row affected (0.00 sec)  mysql> insert into  tb_function(name,creatE_time) values("tuilklmdadq","2020-07-02 15:32:00"); Query OK, 1 row affected (0.00 sec)  mysql> insert into  tb_function(name,creatE_time) values("wesv2wqdshehq","2020-07-02 20:32:00"); Query OK, 1 row affected (0.00 sec)  mysql> insert into  tb_function(name,creatE_time) values("89yoijnlkwr1","2020-07-03 02:56:00"); Query OK, 1 row affected (0.00 sec)  mysql> insert into  tb_function(name,creatE_time) values("olj;nsaaq","2020-07-03 08:41:00"); Query OK, 1 row affected (0.01 sec)  mysql> insert into  tb_function(name,creatE_time) values("ygo;jkdsaq","2020-07-03 16:20:00");  Query OK, 1 row affected (0.01 sec)  mysql> select  * from tb_function; +----+-----------------------+---------------------+ | id | name                  | create_time         | +----+-----------------------+---------------------+ |  1 | anniuadaOAIFAPUHIA    | 2020-07-01 12:00:00 | |  2 | CWQSsar3qcssg         | 2020-07-01 15:00:00 | |  3 | vxfqrt2adafz          | 2020-07-01 21:30:00 | |  4 | etxzwrwbdhegqgaheqhag | 2020-07-02 01:30:00 | |  5 | awrs433fsgvsfwtwg     | 2020-07-02 03:30:00 | |  6 | awrs433fsgvsfwtwg     | 2020-07-02 07:32:00 | |  7 | awrs433fsgvsfwtwg     | 2020-07-02 10:32:00 | |  8 | tuilklmdadq           | 2020-07-02 15:32:00 | |  9 | wesv2wqdshehq         | 2020-07-02 20:32:00 | | 10 | 89yoijnlkwr1          | 2020-07-03 02:56:00 | | 11 | olj;nsaaq             | 2020-07-03 08:41:00 | | 12 | ygo;jkdsaq            | 2020-07-03 16:20:00 | +----+-----------------------+---------------------+ 12 rows in set (0.00 sec)
  1.2 创建索引
  在create_time字段上创建索引  mysql> alter  table tb_function add key idx_create_time(create_time); Query OK, 0 rows affected (0.13 sec) Records: 0  Duplicates: 0  Warnings: 01.3 按时间查询
  查询创建时间是2020-07-01那天的所有记录
  mysql> select  *  from  tb_function  where   date(create_time)="2020-07-01"; +----+--------------------+---------------------+ | id | name               | create_time         | +----+--------------------+---------------------+ |  1 | anniuadaOAIFAPUHIA | 2020-07-01 12:00:00 | |  2 | CWQSsar3qcssg      | 2020-07-01 15:00:00 | |  3 | vxfqrt2adafz       | 2020-07-01 21:30:00 | +----+--------------------+---------------------+ 3 rows in set (0.00 sec)
  执行计划如下  :
  mysql> explain select  *  from  tb_function  where   date(create_time)="2020-07-01"; +----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table       | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       | +----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------------+ |  1 | SIMPLE      | tb_function | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   12 |   100.00 | Using where | +----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec)
  执行计划中可以看出是进行了全面扫描  1.4 优化
  因MySQL5.7不支持函数索引,所以需要修改SQL写法来实现走索引(或者使用虚拟列的方式),上述SQL可以修改为
  mysql> select  *  from  tb_function  where   create_time>="2020-07-01" and create_time explain select  *  from  tb_function  where   create_time>="2020-07-01" and create_time alter  table tb_function add key idx_create_time((date(create_time))); --   注意里面字段的括号 Query OK, 0 rows affected (0.10 sec) Records: 0  Duplicates: 0  Warnings: 02.2 按时间查询
  mysql> select  *  from  tb_function  where   date(create_time)="2020-07-01"; +----+--------------------+---------------------+ | id | name               | create_time         | +----+--------------------+---------------------+ |  1 | anniuadaOAIFAPUHIA | 2020-07-01 12:00:00 | |  2 | CWQSsar3qcssg      | 2020-07-01 15:00:00 | |  3 | vxfqrt2adafz       | 2020-07-01 21:30:00 | +----+--------------------+---------------------+ 3 rows in set (0.00 sec)
  执行计划如下
  mysql> explain select  *  from  tb_function  where   date(create_time)="2020-07-01"; +----+-------------+-------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+ | id | select_type | table       | partitions | type | possible_keys   | key             | key_len | ref   | rows | filtered | Extra | +----+-------------+-------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+ |  1 | SIMPLE      | tb_function | NULL       | ref  | idx_create_time | idx_create_time | 4       | const |    3 |   100.00 | NULL  | +----+-------------+-------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+ 1 row in set, 1 warning (0.00 sec)
  可见,在MySQL8.0 创建对应的函数索引后,不改变SQL写法的前提下,查询的列上进行对应的函数计算后也可以走索引。
  关于MySQL函数索引的优化及MySQL8.0函数索引还可以有更多的场景进行测试,建议大家多动手试试,提高SQL改写及优化的能力。
  想了解更多内容或参与技术交流可以关注微信公众号【数据库干货铺】或进技术交流群沟通。

香会中美交锋,击穿美国三个幻想时隔三年,聚焦亚太安全的重要多边论坛香格里拉对话会再次举办。三年间,全球安全局势发生巨变。黑天鹅和灰犀牛事件频发,安全的意义异常凸显。对抗还是合作,世界处在选择的十字路口。作为最大国际空间站和中国合作的屏障沃尔夫条款标准不统一中国汉字国际空间站依赖俄罗斯动力,这是众所周知的。一旦俄罗斯正式退出国际空间站,意味着国际空间站将失去动力。而中国空间站有两种动力加持,而且备份充足,中国会帮助拯救国际空间站吗?我是东城观8大方面48项!福建稳经济出大招了福建稳经济出大招了!日前,福建省人民政府印发关于贯彻落实扎实稳住经济一揽子政策措施实施方案的通知共8大方面48项措施各设区市人民政府平潭综合实验区管委会,省人民政府各部门各直属机构武功失传谁之过?本人自小喜欢武术,因出身书香门第,忌打打杀杀,最终没拜师学艺,致终身遗憾!但仍以文弱书生之身,操武林征伐之心。近几年来,经常看一些武林高手约架对决,打得那叫一个凄惨!噼里啪啦,甚至先驱者DLCWordslayer新预告7月1日发售在今天(6月10日)凌晨的夏日游戏节上,刷宝射击游戏先驱者公布了DLCWordslayer的全新预告片,该DLC将于7月1日正式发售,预购可提前48小时进入游戏。先驱者DLCWor4天报告166例,有到访者14天未做核酸,天堂超市酒吧那晚发生了什么?近日,北京天堂超市酒吧的聚集性疫情关联北京多区,4天报告166例感染者。一个酒吧,为何短时间内爆发出如此多的病例?4天报告166例感染者!防控难度超过新发地疫情6月12日0时15时F22A部署琉球,空警500可一探究竟,美军E3B预警机升空,不敢怠慢美国空军E3望楼空中预警机最近几天相当的忙碌,根据航空管制信息显示,编号为770352的E3B望楼空中预警机,在6月13日早上闯入了东海防空识别区。之前美国空军很少在东海防空识别区如果夫妻中有一人是O型血,生出的宝宝有什么特点呢?不妨了解中国人汉族中包含两种血型系统,一个是ABO系统,另一个是RH系统。常见的血型是A型B型AB型和O型,而这其中的每一型,都可以有RH阳性和RH阴性血型,汉族人群中,99都是RH阳性血铁甲小宝的13颗和平星都许了什么愿?一杯水也要许愿为什么铁甲小宝里的十几个机器人要这么努力的比赛?这和比赛的奖励有很大的关系,谁能赢得比赛,就能拿到可以实现愿望的和平星,在整部作品中一共有十三颗和平星,这个数字可不是随随便便的,各能不能将155自行大炮加厚装甲,直接当坦克用?一场战争让主战坦克的角色再度暗淡起来。因为尽管采取了各种加强坦克生存力的措施,比如增加反应装甲,安装可见光和红外对抗系统,尽量的少带弹药防止殉爆,甚至直接给主战坦克的炮塔上增加一两辽宁女老师接新班见证忧郁女孩的变化,网友眼眶湿润改变一生题记有些人真的可以改变自己的一生作者南海看云人的一生,会遭遇到许许多多的老师,有些老师因为她的方法独特,可能会影响孩子的一生。俗话说得好,好老师就是自己一生中最爱的人,在这些好老师
重磅!埃塞当局对电动汽车实施新的税费新政9月16日,埃塞财政部宣布实施税费改革,鼓励从事电动汽车(ElectricVehicles)投资的行业和进口商,并使整个社会受益。作为税费改革结果,该部确认,进口和国产电动公共交通意甲1不敌垫底队遭遇五场不胜北京时间9月18日21点,20222023赛季意甲联赛第7轮迎来一场焦点之战尤文图斯客场对阵升班马蒙扎。上半场,双方都没能取得进球,迪马利亚因不冷静行为被红牌直接罚下,双方战成00细数装修插座翻车现场,网友称看了会哭笑不得,不建议大家效仿嗨,大家好,我是装修日记本,记录装修大小事吃别人的堑,长自己的智。装修是个系统工程,每一步都需要做好详细规划,小的开关插座位也是业主逃不过的坎。家里就算装满插座,结果用起来很糟心!资讯将替代传统散热器?华为申请汽车散热系统专利文懂车帝原创许博懂车帝原创产品日前,华为技术有限公司申请了一款汽车散热系统的专利,并获得授权。该专利可代替汽车上传统的散热器和散热风扇,能够达到降低车辆噪音,提升用户体验的目的。华配方奶营销影响对婴儿喂养的决定萌娃成长季之高手出击母乳喂养是婴儿的第一种疫苗,可以保护他们免受许多常见的儿童疾病的侵害,还可以降低女性未来患糖尿病肥胖症和某些癌症的风险。科学研究认为,在出生后的第一个小时内进行离婚3年后,文章38岁复出又出轨,而毁掉他的,不仅仅是出轨一文章在遇到马伊琍之前,马伊琍就已经靠着京圈男友管虎在圈内站稳了脚跟,而他还不过是一位青涩的高中生。马伊琍是地地道道的上海女人,在和管虎拍拖之前,她在上戏读书期间就已经有了两个很好从无球可打到优质3D悍将,感谢湖人,感谢老詹,小伙正在超级崛起在NBA联盟也是要讲辈分的,也是要讲人情世故的,年轻人在刚刚进入NBA联盟,就算你天赋异禀,也要懂得尊敬前辈,懂得努力学习前辈球星的技术和韧性。如果只是低顺位的新秀,或者是落选秀球俄罗斯用西方零件的SSJ100客机,即将面临全趴窝,给C919提了个醒从俄乌战争爆发之后,世界局势紧张起来,国际秩序也乱了,比如西方对俄罗斯的制裁打破了许多原本规则,让人不得不心生警惕。西方不再讲什么规则。在近日,大家可以看到一个消息,波音将原本要卖胡懋仁重庆山火所带来的思考编者按本文经作者昆仑策研究院高级研究员胡懋仁教授授权昆仑策研究院头条号原创发布,以供研究参考。重庆山火,前方消防队员英勇奋战,后方大批重庆青年(当然不一定都是重庆本地人)在全力用自3A大作放口袋!盖世小鸡X2pro联手微软XBOX,手机也支持XGP游戏海外游戏厂商主打的3A游戏,对PC的CPU显卡等配置往往有非常高的要求。而考虑到游戏价格是否长期游玩等因素,也并非所有玩家都愿意购买一台游戏主机。在这种情况下,无需本地设备运算透过赵云两战不胜后败走初平二年,关羽张飞与颜良文丑单挑谁能赢?自古美人如名将,不许人间见白头。拳出少壮,棍怕老郎。战场和江湖中这两句话,看起来有些矛盾,但却能有机地结合起来近身格斗拳脚相搏,当然是身强力壮的年轻人占便宜,但是要玩儿技巧耍花招施