可以,mysql现在已经逐渐成长为一个很成熟的数据库,不光有完善的备份、还原、主从方案。而且还有很多集群方案。
创新互联建站专业为企业提供清江浦网站建设、清江浦做网站、清江浦网站设计、清江浦网站制作等企业网站建设、网页设计与制作、清江浦企业网站模板建站服务,十载清江浦做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
从集群实现方案的多样性来说,mysql已经超越了oracle。而且正常情况下mysql的备份,恢复比oracle更简单,快捷。停机故障修复时间,也比oracle要好的多。。
最重要的是,它是免费的,而且很适合搭建在x86平台上,可以用廉价的服务器提供完善的数据库服务。相比oracle+小型机的成本,简直便宜的要死,不过如果你说要用pc机搭载oracle,那我只能说你应该是不太考虑性能问题的。oracle吃硬件是很严重的。低端服务器上跑起来会很让人困扰。
另外从业界应用来说,基本上所有的互联网公司和电商都在使用mysql,包括12306,连铁道部都用了。能说不能作为企业级开发么?
当然,上面都是说mysql的优点,同样也有缺点:
优化器相比oracle的CBO差距不是一点半点,一些复杂sql都会存在比较明显的解析问题,所以在开发过程中,对程序员要求会高点,比如说尽可能多的逻辑在程序中实现,或者更好的数据模型设计,总之一定要避免数据库中的复杂逻辑sql或者批处理任务。
最关键的一点,作为一个开源软件,缺乏原厂服务,当然目前国内也有了一些mysql的第三方服务团队。很多从淘宝、阿里出来的人都在做这个。
无需用户自己考虑高可用、备份恢复等问题,而且阿里针对开源的数据库做了部分优化。
另外提供一些诸如监控、告警、备份、恢复、调优的手段。
就是减轻用户在业务无关方面的花销,花小钱省下力气聚焦在自己的业务上。
无论单列索引 or 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含:
即使根据索引树按条件找到所需数据,也仅是索引里的几个字段的值和主键值,万一你搞个select *,那就还得其他字段,就需回表,根据主键到聚簇索引里找,聚簇索引的叶节点是数据页,找到数据页才能把一行数据所有字段值读出来。
所以类似
得从联合索引的索引树里按序取出所有数据,接着对每条数据都走一个主键的聚簇索引查找,性能不高。
有时MySQL执行引擎可能认为,你要是类似
相当于得把联合索引和聚簇索引,两个索引的所有数据都扫描一遍,那还不如不走联合索引,直接全表扫描得了,这样就只需扫描一个主键索引。
但若形如:
那执行引擎就知道你先扫描联合索引的索引树,拿到10条数据,接着对10条数据在聚簇索引里查找10次即可,那就还是会走联合索引。
覆盖索引不是一种索引,只是一种基于索引查询的方式,即针对类似
仅需联合索引里的几个字段的值,那就只需扫描联合索引的索引树,无需回表找其它字段,这种查询方式就是覆盖索引。
所以当你使用联合索引时,注意是否可能会导致大量回表到聚簇索引,若回表聚簇索引的次数太多,可能就直接给你做成全表扫描而不走联合索引了。
尽可能还是在SQL里指定你仅需要的字段,而不要暴力select *,最好直接走覆盖索引。
即使无可避免地要回表,你也尽可能用limit、 where限定一下回表的次数,就从联合索引里筛选少数数据,再回表,这样性能好一点。