PHP面试要点——mysql

Mysql

1.char与varchar的区别

mysql 5.0以上数据长度都用字符长度度量。

  • char 定长字符串、速度较快但浪费空间,最多255个字符(与编码无关);
  • varchar 变长字符串、速度较慢但节省空间,行的最大长度65535个字节,长度与编码有关gbk是(65535-1-2-行中其他字段暂用的长度)/2,utf-8是(65535-1-2-行中其他字段占用的长度)/3<=21844。

3. 常见的引擎

MyISAM、InnoDB、MEMORY、MRG_MyISAM、HEAP、BOB、ARCHIVE、CSV

MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。

InnoDB(默认):支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。

Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。

Memory存储引擎使用存在于内存中的内容来创建表;

对比MyISAM和InnoDB区别

  1. InnoDB支持事务,MyISAM不支持;
  2. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  3. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
  4. Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;
  5. innodb支持行锁,myisam支持页锁

如何选择

  1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;
  2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用InnoDB。
  3. 默认引擎InnoDB

4. select count(*)与select count(1)的区别

与数据表使用的引擎和版本有关。
目前主流的引擎Innodb。
count(primary) > count(1) > count() > count(colunm)
有些版本对count(
)做过优化。速度可能是最快的。需要在数据库中实际测试

5. select * 和select colunm 的区别

尽量避免使用select *
原因:

  • select * 多一个解析为字段的过程
  • 取出不需要的字段,浪费内存
  • 取出不需要的字段,浪费sql性能
  • select colunm如果都是索引字段,触发索引覆盖,数据库只需要查所以表,性能会显著提升
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值