博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于sql优化整理一下
阅读量:5322 次
发布时间:2019-06-14

本文共 990 字,大约阅读时间需要 3 分钟。

1.where 子句中可以对字段进行 null 值判断吗?

       可以,比如 select id from t where num is null 这样的 sql 也是可以的。但是最好不要给数据库留 NULL,尽可
  能的使用 NOT NULL 填充数据库。不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了,
  不管是否插入值(NULL 也包含在内),都是占用 100 个字符的空间的,如果是 varchar 这样的变长字段,null 不占
  用空间。可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询:select id from t where num = 0。

2. select * from admin left join log on admin.admin_id = log.admin_id where

log.admin_id>10 如何优化?
优化为: select * from (select * from admin where admin_id>10) T1 lef join log on T1.admin_id =
log.admin_id。
使用 JOIN 时候,应该用小的结果驱动大的结果(left join 左边表结果尽量小如果有条件应该放到左边先处理,
right join 同理反向),同时尽量把牵涉到多表联合的查询拆分多个 query(多个连表查询效率低,容易到之后锁表和
阻塞)

3. limit 的基数比较大时使用 between

例如:select * from admin order by admin_id limit 100000,10
优化为:select * from admin where admin_id between 100000 and 100010 order by admin_id

4.尽量避免在列上做运算,这样导致索引失效

例如:select * from admin where year(admin_time)>2014
优化为: select * from admin where admin_time> '2014-01-01'

 

转载于:https://www.cnblogs.com/x9y9h/p/10266559.html

你可能感兴趣的文章
第2章:标准输入与输出
查看>>
个人项目——买书
查看>>
POJ 2309 BST
查看>>
Codefroces 415B Mashmokh and Tokens
查看>>
HDU 3440 House Man
查看>>
Mysql 用户管理
查看>>
实验五
查看>>
焊接贴片
查看>>
C/C++掌握技能(一)
查看>>
数据库事务与锁详解
查看>>
实验3
查看>>
oracle导入大批量数据(20G)
查看>>
洛谷 P1508 Likecloud-吃、吃、吃
查看>>
Tile的更新
查看>>
在同一个页面设置两个选项卡菜单 滑动式导航
查看>>
Mybatis: 无效的列类型:1111错误
查看>>
DataGridView隔行显示不同的颜色
查看>>
封装数据库配置文件App配置文件
查看>>
python 执行shell命令
查看>>
Mybatis的mapper文件中$和#的区别
查看>>