最近项目开发中遇到的索引优化

简单的搜索功能会使用like

like语句的前导模糊查询不能使用索引,根据最左前缀原则,因为页面搜索严禁左模糊或者全模糊,如果需要可以使用搜索引擎来解决。

select * from doc where title like '%XX';   -- 不能使用索引
select * from doc where title like 'XX%';   -- 非前导模糊查询,可以使用索引

union、in、or 都能够命中索引,建议使用 in

一个是or的优化消耗CPU比较多,同时会导致数据库引擎放弃索引进行全表扫描,所以不推荐使用。而union和in的优化CPU消耗差不多,甚至union更好一些但不多,但是一般建议使用in会SQL语句简洁一些。对于开发者而言使用in会更加舒适一些。

select * from doc where status=1
union all
select * from doc where status=2;
​
select * from doc where status in (1, 2);

NULL

注意判断使用is null / is not null会无法使用索引,同时会导致全表扫描,一般我们都会给字段赋予默认值,避免这些特殊的情况。同时如果复合索引只要有一列有NULL值,那么该列对复合索引就无效了。

使用allow_null赋予字段,往往要注意一些特别的操作,例如在python web框架Django的serializer操作中加额外的操作会导致一些出乎意料的错误。

特殊操作

不要在索引列上面做任何操作(计算、函数、类型转换),否则会导致索引失效而转向全表扫描。

比如你的日期字段是对应到秒位的,但你偏偏用到日期位的去匹配;字符串类型的ID匹配却带整型去匹配,导致类型转换使索引失效。

计算、函数、类型转换等等操作,都建议在ORM操作的前后去处理它。同时现在WEB框架也不适宜去处理复杂的SQL类型,取出数据做额外操作为益,或用缓存等方式处理。

(个人在实践中发现用Redis去操作的收益是比较不错的)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/12595.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YAML /Excel /CSV?自动化测试测试数据管理应用,测试老鸟总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试无论是…

ChatGPT实战100例 - (02) 自动出PPT它不香么?

文章目录 ChatGPT实战100例 - (02) 自动出PPT它不香么?一、需求与思路1. 需求:出个PPT,5分钟后要用2. 思路:生成markdown然后转化 二、生成markdown语法的思维导图1. 问题2. 回答 三、把markdown文本转换成PPT ChatGPT实战100例 -…

MIMO-OFDM无线通信技术(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本代码为MIMO-OFDM无线通信技术及MATLAB实现。分为十章,供大家学习。 📚2 运行结果 主函数部分代码&a…

Mysql安装详细教程

数据库相关概念 而目前主流的关系型数据库管理系统的市场占有率排名如下: Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。 MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle…

逆向-还原代码之(*point)[4]和char *point[4] (Interl 64)

// source code #include <stdio.h> #include <string.h> #include <stdlib.h> /* * char (*point)[4] // 数组指针。 a[3][4] // 先申明二维数组,用它来指向这个二维数组 * char *point[4] // 指针数组。 a[4][5] // 一连串的指针…

知识点学习登记备份信息

知识点记录 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ovilnIi-1681441105895)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211228090433836.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上…

全景丨0基础学习VR全景制作,平台篇第五章:开场封面功能

大家好欢迎观看蛙色平台使用教程 开场封面功能&#xff0c;现已支持开场图片和开场视频两种呈现方式&#xff0c; 分别针对PC端和移动设备访问分别设置呈现图片、视频内容&#xff0c;满足市场主流需求。 开场图片 传达主旨 1、全局-开场封面-图片 2、分别对PC端和移动设备访…

【加载plist文件展示单组数据 Objective-C语言】

一、接下来,我们要为大家演示如何通过加载plist文件,使用UITableView展示单组数据, 1.最后运行起来的效果,是一个什么效果呢,是这样一个效果: 2.这个里面,这就是一个单元格吧, 这就是一个单元格, 这个单元格里面,包括一个图片框、一个TextLabel、一个DetailLabel、…

[CVPR 2020] Regularizing Class-Wise Predictions via Self-Knowledge Distillation

Contents IntroductionClass-wise self-knowledge distillation (CS-KD)Class-wise regularizationEffects of class-wise regularization ExperimentsClassification accuracy References Introduction 为了缓解模型过拟合&#xff0c;作者提出 Class-wise self-knowledge di…

3.rabbitmq-集群

1.修改3台的主机名称,也可以不改 vi /etc/hostname 2.配置各个节点的host文件,让各节点都能识别对方 vi /etc/hosts 192.168.3.132 host-rabbitmq 192.168.3.133 host-rabbitmq2 192.168.3.134 host-rabbitmq3 3.以确保各个节点的cookie文件使用的同一个值 在node1上执行远程命…

PostgreSQL技术内幕(七)索引扫描

索引概述 数据库索引&#xff0c;是将一个表的某些字段的数据进行重新组织的数据库对象。通过使用索引&#xff0c;可以大大加速数据库的一些操作&#xff0c;其背后的思想也很简单朴素&#xff1a;空间换时间。 数据库中的索引&#xff0c;可以类比为一本书的目录&#xff0…

远程代码执行渗透与防御

远程代码执行渗透与防御 1.简介2.PHP RCE常见函数3.靶场练习4.防御姿势 1.简介 远程代码执行漏洞又叫命令注入漏洞 命令注入是一种攻击&#xff0c;其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。 当应用程序将不安全的用户提供的数据&#xff08;表单、cook…

如何在Java中创建临时文件?

在Java程序中&#xff0c;有时需要创建临时文件来暂存数据或者执行某些操作。Java提供了许多方式来创建临时文件。在本教程中&#xff0c;我们将介绍如何使用Java标准库来创建临时文件。 一、使用File.createTempFile()方法 Java标准库中的File类提供了createTempFile()方法来…

条款08: 别让异常逃离析构函数

文章目录 背景知识析构函数 背景知识 下面是一段测试代码&#xff1a; class Test { public:Test(int para){m_num para;};void test_throw(){throw(3);};~Test() {cout<<"delete Test"<<m_num<<endl;//test_throw();};int m_num; }; int main(…

无线耳机哪个音质比较好?四百内音质最好的无线耳机排行

蓝牙耳机常常作为手机的伴生产品而出现在人们的日常生活当中&#xff0c;其使用场景也越来越广泛。而随着蓝牙技术的发展&#xff0c;蓝牙耳机在音质上的表现也越来越好。下面&#xff0c;我来给大家推荐几款四百内音质最好的无线耳机&#xff0c;一起来看看吧。 一、南卡小音舱…

Java多线程基础面试总结(三)

线程的生命周期和状态 Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态&#xff1a; NEW&#xff1a;初始状态&#xff0c;线程被创建出来&#xff0c;但是还没有调用start()方法。RUNABLE&#xff1a;运行中状态&#xff0c;调用了start()…

什么是 AUTOSAR C++14?

总目录链接>> AutoSAR入门和实战系列总目录 总目录链接>> AutoSAR BSW高阶配置系列总目录 文章目录 什么是 AUTOSAR C14&#xff1f;AUTOSAR C14 规则和偏差静态分析工具可以完全支持自动 什么是 AUTOSAR C14&#xff1f; 它是 C 版本 14 (ISO/IEC 14882:2014…

layui框架学习(23:代码文本修饰模块)

Layui中的代码文本修饰模块layui.code主要用于修饰代码区域或文本行&#xff0c;其基本用法是使用预设类layui-code标识包含代码或文本的元素&#xff0c;然后调用layui.code函数渲染样式。Layui官网教程及示例中主要使用pre元素包含带修饰的代码或文本&#xff08;pre元素可定…

Qt在安卓手机输出‘hello,world‘

我也想实现这样的功能。 最开始的参考文章&#xff1a; (2条消息) Qt android 开发环境搭建_逝水流年丶轻染尘的博客-CSDN博客 方案1&#xff1a;(失败) 我之前已经下载过 Qt5.14.2了&#xff0c;所以我想直接添加组件 中间过程参考&#xff1a; (2条消息) Qt更新组件出现&…

Kubernetes 多集群管理工具Rancher 使用介绍

目录 一、Rancher 简介 2.1 Run Kubernetes Everywhere 2.2 满足 IT 需求规范 2.3 赋能 DevOps 开发团队 2.4 Rancher API Server 的功能 2.4.1授权和角色权限控制 2.4.2使用 Kubernetes 的功能 2.4.3 配置云端基础信息 2.4.4 查看集群信息 2.5 编辑下游集群 二、Ra…
最新文章