一、int(10) 和 char(10) 的区别?
int(10)
中的 10 表示的是显示数据的长度,而char(10)
表示的是存储数据的长度。
二、char 和 varchar 的区别?
1、char
的长度是不可变的,用空格填充到指定长度大小,而 varchar
的长度是可变的。
2、char
的存取速度还是要比 varchar
要快得多。
3、char
的存储方式:对英文字符(ASCII)占用 1 个字节,对一个汉字占用 2 个字节。
varchar
的存储方式:对每个英文字符占用 2 个字节,对一个汉字也占用 2 个字节。
三、exists 和 in 的区别?
1、exists 用于对外表记录做筛选
exists 会遍历外表,将外查询表的每一行,代入内查询进行判断。当 exists 里的条件语句能够返回记录行时,条件就为真,返回外表当前记录。反之如果exists里的条件语句不能返回记录行,条件为假,则外表当前记录被丢弃。
select a.* from A a where exists(select 1 from B b where a.id = b.id)
2、in 先遍历子查询的表
in 是先把后边的语句查出来放到临时表中,然后遍历临时表,将临时表的每一行,代入外查询去查找。
select * from A where id in(select id from B)
总结
子查询的表大的时候,使用 exists
可以有效减少总的循环次数来提升速度;
外查询的表大的时候,使用 in
可以有效减少对外查询表循环遍历来提升速度。