11. 有一条sql执行非常慢,如何进行优化(重点讲优化的思路)?
1、主从结点实现分离读写,采取主从复制把数据库的读操作和写操作分离出来。
2、尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
3、创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。
4、索引。索引应建立在那些将用于JOIN,WHERE判断和ORDERBY排序的字段上。尽量不要对数据库中
某个含有大量重复的值的字段建立索引。
5、使用优化的SQL语句,避免索引失效。
6、用join替代子查询(子查询指把一个查询的结果在另一个查询中使用就叫做子查询)。连接
(JOIN)之所以更有效率一些,是因为MySQL不需要在内存中创建临时表
12. 现在有一张订单表,数据量很大,如果要从供应商的角度查询
数据如何进行查询,从用户的角度查询数据如何进行查询?
数据库主从分离,在从库建立供应商/用户/产品/时间等多维度的索引,进行统计查询时请求从库
13.视图的作用:
①简化了操作,把经常使用的数据定义为视图。
我们在使用查询时,在很多时候我们要使用聚合函数,同时还要 显示其它字段的信息,可能还会需要关
联到其它表,这时写的语句可能会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我
们只需要select * from view就可以啦,这样很方便。
②安全性,用户只能查询和修改能看到的数据。
因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,
可以不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图
不可以随意的更改和删除,可以保证数据的安全性。
③逻辑上的独立性,屏蔽了真实表的结构带来的影响。
视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视
图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。
#查询如下内容
select * from product limit 866613, 20
#通过查询id来优化速度,因为id是主键,利用索引会更快找到
select id from product limit 866613, 20
#上面那个只可以找到一列,如果要所有列可以如下
SELECT * FROM product
WHERE ID > =(select id from product limit 866613, 1) limit 20