为什么查询速度会慢?
查询性能低下最基本的原因是访问的数据太多
某些不必要的额外操作,某些操作被额外地重复很多次,某些操作执行得太慢。
优化查询的目的就是减少和消除这些操作所花费的时间。
1、索引
- https://baike.baidu.com/item/数据库索引/8751686
- 索引是用来定位的
- 索引是对数据库表中排序的一种结构,能快速访问数据库表中的特定信息。
- 主要目的就是加快检索表中数据
CREATE TABLE mytable(
idserial int primary key,
category_id int default 0not null ,
user_id int default 0not null ,
adddate int default 0not null
);
|
如果在查询时常用类似以下的语句:
SELECT * FROM mytable WHERE category_id=1;
最直接的应对之道,是为category_id建立一个简单的
索引:
CREATE INDEX mytable_categoryid ON mytable (category_id);
OK.如果有不止一个选择条件呢?例如:
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。可以建立多重的
索引。
CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);
注意到在命名时的习惯了吗?使用"表名_
字段1名_字段2名"的方式。
2、分库
分表
- 就是把一张数据量很大的表按一定的规则分解成很多个独立存储空间的实体表。
分区
- 就是把一张表的数据分成多个区块,在逻辑上看最终只是一张表,但底层是由多个物理区块组成的
3、预处理
4、MySQL like 查询
5、数据库引擎
6、读写分离
- 读写分离,解决的是,数据库的写入,影响了查询的效率。
why 那么为什么要读写分离呢?
因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。
但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。
when 什么时候要读写分离?
程序使用数据库较多时,而更新少,查询多的情况下会考虑使用
mysql读写分离原理
读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。
前较为常见的Mysql读写分离分为以下两种:
1)基于程序代码内部实现
在代码中根据select 、insert进行路由分类,这类方法也是目前生产环境下应用最广泛的。优点是性能较好,因为程序在代码中实现,不需要增加额外的硬件开支,缺点是需要开发人员来实现,运维人员无从下手。
2) 基于中间代理层实现
代理一般介于应用服务器和数据库服务器之间,代理数据库服务器接收到应用服务器的请求后根据判断后转发到,后端数据库
这是我自己总结的一些,文章中有大神的博客链接推荐看一下
优化数据库
原文:https://www.cnblogs.com/jiqu/p/11025495.html