
一、一些常见的sql实践
(1)负向条件查询不能使用索引
select * from order where status!=0 and stauts!=1
not in/not exists都不是好习惯
推荐 《mysql视频教程》
可以优化为in查询:
select * from order where status in(2,3)
(2)前导模糊查询不能使用索引
select * from order where desc like '%XX'
而非前导模糊查询则可以:
select * from order where desc like 'XX%'
(3)数据区分度不大的字段不宜使用索引
select * from user where sex=1
原因:性别只有男,女,每次过滤掉的数据很少,不宜使用索引。
经验上,能过滤80%数据时就可以使用索引。对于订单状态,如果状态值很少,不宜使用索引,如果状态值很多,能够过滤大量数据,则应该建立索引。
(4)在属性上进行计算不能命中索引
select * from order where YEAR(date) < = '2017'
即使date上建立了索引,也会全表扫描,可优化为值计算:
select * from order where date < = CURDATE()
或者:
select * from order where date < = '2017-01-01'
二、并非周知的SQL实践
(5)如果业务大部分是单条查询,使用Hash索引性能更好,例如用户中心
select * from user where uid=? select * from user where login_name=?
原因:
B-Tree索引的时间复杂度是O(log(n))
Hash索引的时间复杂度是O(1)
(6)允许为null的列,查询有潜在大坑
单列索引不存null值,复合索引不存全为null的值,如果列允许为null,可能会得到“不符合预期”的结果集
select * from user where name != 'shenjian'
如果name允许为null,索引不存储null值,结果集中不会包含这些记录。
所以,请使用not null约束以及默认值。
(7)复合索引最左前缀,并不是值SQL语句的where顺序要和复合索引一致
Trae国内版
国内首款AI原生IDE,专为中国开发者打造
2045
查看详情
用户中心建立了(login_name, passwd)的复合索引
select * from user where login_name=? and passwd=? select * from user where passwd=? and login_name=?
都能够命中索引
select * from user where login_name=?
也能命中索引,满足复合索引最左前缀
select * from user where passwd=?
不能命中索引,不满足复合索引最左前缀
(8)使用ENUM而不是字符串
ENUM保存的是TINYINT,别在枚举中搞一些“中国”“北京”“技术部”这样的字符串,字符串空间又大,效率又低。
三、小众但有用的SQL实践
(9)如果明确知道只有一条结果返回,limit 1能够提高效率
select * from user where login_name=?
可以优化为:
select * from user where login_name=? limit 1
原因:
你知道只有一条结果,但数据库并不知道,明确告诉它,让它主动停止游标移动
(10)把计算放到业务层而不是数据库层,除了节省数据的CPU,还有意想不到的查询缓存优化效果
select * from order where date < = CURDATE()
这不是一个好的SQL实践,应该优化为:
$curDate = date('Y-m-d');
$res = mysql_query(
'select * from order where date < = $curDate');原因:
释放了数据库的CPU
多次调用,传入的SQL相同,才可以利用查询缓存
(11)强制类型转换会全表扫描
select * from user where phone=13800001234
你以为会命中phone索引么?大错特错了,这个语句究竟要怎么改?
末了,再加一条,不要使用select *,只返回需要的列,能够大大的节省数据传输量,与数据库的内存使用量哟。
本文来自,mysql教程栏目,欢迎学习!
以上就是鲜为人知的10条SQL语句优化的详细内容,更多请关注其它相关文章!
# 优化
# 离线
# 国内
# 鲜为人知
# 中文网
# 周知
# 解决方法
# 中国
# 如何处理
# sql
# 桂林提升seo哪家好
# 关键词排名报价北京
# 新津网站建设和维护
# 专业的网站建设蓝云
# 营销服务公众号上线推广
# 长沙抖音seo优化技巧
# 微信如何营销推广产品
# 荷泽网站seo优化推广
# 柳州网站建设产品介绍
# 牡蛎抖音seo
# 而不是
# 的是
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
使用jQuery精确检测除指定元素外任意位置的点击事件
J*a中的值传递到底指什么_值传递模型在参数传递中的真正含义说明
Pandas中基于动态偏移量实现DataFrame列值位移的策略
中通快递官网指定查询 中通快递单号查询平台入口
《百果园》充值余额方法
263企业邮箱如何设置邮件转发功能
微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程
如何使用 Optional 类型并满足 Pylint 的类型检查
惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置
《梦想世界:长风问剑录》药师一图流分享
知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法
《虎扑》取消评分记录方法
如何配置VS Code作为您Git操作的默认编辑器
mail.qq.com登录入口 QQ邮箱网页版直达
米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复
百度网盘如何设置上传限额
苹果手机手电筒无法开启
手机远程连接电脑方法
如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧
《星露谷物语》克林特好感度事件介绍
手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧
Composer reinstall命令重装损坏的包
抖音视频如何添加标题?添加标题有哪些好处?
谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录
漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接
抖音号已注销怎么解绑企业认证?不解绑企业认证会怎样?
win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】
《书耽》更换手机号方法
在J*a里什么是行为抽象_抽象行为对代码复用的提升作用
Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】
《360浏览器》设置摄像头权限方法
Three.js中动态更换3D模型纹理的教程
鸣潮历史学家灯塔位置一览
《七读免费小说》开通会员方法
《procreate》绘制渐变效果教程
哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南
支付宝网页版在线入口 支付宝官网电脑登录入口
食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗
顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南
优化 React onClick 事件处理:函数引用与箭头函数的对比
《新三国志曹操传》游历事件袁尚突围攻略
B站怎么快速升级 B站用户等级提升攻略【详解】
Dash应用中自定义HTML页面标题与网站图标(F*icon)的实用指南
PHP实现等比数列:构建数组元素基于前一个值递增的方法
Golang如何使用log记录日志信息_Golang log日志记录方法总结
163邮箱网页版入口 163邮箱在线使用
美发店速赢秘籍
AO3中文版手机快速通道_AO3最新稳定链接更新
TikTok视频播放不流畅怎么办 TikTok视频播放优化方法
深入理解J*aScript异步操作:setTimeout与调用栈的真相
2019-11-27
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。