暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
SQL优化20招.pdf
190
12页
1次
2022-12-02
25墨值下载
一、查询SQL尽量不要使用select *,而是具体字段
1
、反例
SELECT * FROM user
2
、正例
SELECT id,username,tel FROM user
3
、理由
1. 节省资源、减少网络开销。
2. 可能用到覆盖索引,减少回表,提高查询效率。
注意:为节省时间,下面的样例字段都用
*
代替了。
二、避免在
where
子句中使用
or
来连接条件
1
、反例
SELECT * FROM user WHERE id=1 OR salary=5000
2
、正例
1
)使用
union all
SELECT * FROM user WHERE id=1
UNION ALL
SELECT * FROM user WHERE salary=5000
2
)分开两条
sql
SELECT * FROM user WHERE id=1
SELECT * FROM user WHERE salary=5000
3
、理由
1. 使用 or 可能会使索引失效,从而全表扫描;
2. 对于 or 没有索引的 salary 这种情况,假设它走了 id 的索引,但是走到 salary 查询条件时,它还
得全表扫描;
3. 也就是说整个过程需要三步:全表扫描+索引扫描+合并。如果它一开始就走全表扫描,直接一遍扫
描就搞定;
4. 虽然
mysql 是有优化器的,出于效率与成本考虑,遇到 or 条件,索引还是可能失效的;
三、尽量使用数值替代字符串类型
1
、正例
1. 主键(id): primary key 优先使用数值类型 int tinyint
2. 性别(sex):0代表女,1代表男;数据库没有布尔类型, mysql 推荐使用 tinyint
2
、理由
1. 因为引擎在处理查询和连接时会逐个比较字符串中每一个字符;
2. 而对于数字型而言只需要比较一次就够了;
3. 字符会降低查询和连接的性能,并会增加存储开销;
四、使用
varchar
代替
char
1
、反例
`address` char(100) DEFAULT NULL COMMENT '地址'
2
、正例
`address` varchar(100) DEFAULT NULL COMMENT '地址'
3
、理由
1. varchar 变长字段按数据内容实际长度存储,存储空间小,可以节省存储空间;
2. char 按声明大小存储,不足补空格;
3. 其次对于查询来说,在一个相对较小的字段内搜索,效率更高;
五、技术延伸,
char
varchar2
的区别?
1 char 的长度是固定的,而 varchar2 的长度是可以变化的。
比如,存储字符串
“101” ,对于 char(10) ,表示你存储的字符将占10个字节(包括7个空字符),在数
据库中它是以空格占位的,而同样的
varchar2(10) 则只占用3个字节的长度,10只是最大值,当你存储
的字符小于
10
时,按实际长度存储。
2
char 的效率比 varchar2 的效率稍高。
3、何时用
char ,何时用 varchar2 ?
char varchar2 是一对矛盾的统一体,两者是互补的关系, varchar2 char 节省空间,在效率上
char 会稍微差一点,既想获取效率,就必须牺牲一点空间,这就是我们在数据库设计上常说的以空
间换效率
varchar2 虽然比 char 节省空间,但是假如一个 varchar2 列经常被修改,而且每次被修改的数据的长
度不同,这会引起行迁移现象,而这造成多余的I/O,是数据库设计中要尽力避免的,这种情况下用
ch
ar 代替 varchar2 会更好一些。 char 中还会自动补齐空格,因为你 insert 到一个 char 字段自动补充
了空格的,但是
select 后空格没有删除,因此 char 类型查询的时候一定要记得使用 trim ,这是写本文
章的原因。
如果开发人员细化使用
rpad() 技巧将绑定变量转换为某种能与 char 字段相比较的类型(当然,与截
trim 数据库列相比,填充绑定变量的做法更好一些,因为对列应用函数 trim 很容易导致无法使用该
列上现有的索引),可能必须考虑到经过一段时间后列长度的变化。如果字段的大小有变化,应用就会
受到影响,因为它必须修改字段宽度。
正是因为以上原因,定宽的存储空间可能导致表和相关索引比平常大出许多,还伴随着绑定变量问题,
所以无论什么场合都要避免使用
char
类型。
六、
where
中使用默认值代替
null
1
、反例
of 12
25墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。