可以考虑从下边几个方面说
硬件 数据库的设计 外键 索引及sql语句的书写 字段 读写分离 引入缓存
数据库的设计 遵循三大范式,避免数据冗余增加中间表,对于联合查询较多的表,可以先将其联合查询的数据先存入到一张中间表中,之后再查询时直接查中间表就行啦读写分离 数据库拆分,主库负责写,从库负责读
分库分表
垂直分表 例如一些表中,某些字段使用的频率很高,但一些字段使用的频率很低,可以将其分开存到两张表上,比如用户登录信息和基本信息 优点 每张表能存更多的信息,查询特定字段效率更高缺点 更容易导致join连接,会给逻辑层增加压力 水平分表 不破坏表的结构,当数量到达一定程度时,将其拆分到另一个库中 优点 能够支持很大的数据量缺点 不管运维,逻辑哪方面都会很麻烦,不建议使用外键 外键会降低mysql的效率,尽量避免使用
sql语句的书写 1 可以用EXISTS替代IN,否则会导致全表扫描 2 避免where字句中使用表达式,函数,否则mysql不会使用索引 3 可以使用连接查询代替子查询 4 只查询想要的字段,避免使用select *,要过滤掉不需要的数据 5 避免where后跟or使用,否则会导致全表扫描
字段 良好的字段设计可以提升sql查询的效率
引入缓存 对于需要重复查询的数据,可以将其放入redis中,避免重复查询
索引 1 加入索引,经常查询的字段可以加上索引,尽量在where或order by后的字段加上索引 2 可以将索引列设为非空,查询null或非null时不会使用索引
主从复制 其实就是备份,原理是将主数据库中一切关于更改数据的操作放到binlog中,从数据库获取binlog的内容后再输出到relaylog(中继日志)中,之后再执行relaylog中的操作,这样就完成啦数据的拷贝
优点 读写分离,主库负责写,从库负责读更加安全,主数据库崩啦还有从数据库能够降低数据库的压力答案 :b+树
聚簇索引是已主键id生成索引树,叶子结点存放的是(主键id,具体数据)的这么一个形式; 非聚簇索引是已用户自定义关键字段生成索引树,叶子存放的是(关键字字段,主键id)这么一个形式,若想查找具体的数据,仍需通过聚簇索引再次找到需要的数据,这里贴上两张图就明白啦
聚簇索引树 非聚簇索引树