首页 > 试题广场 >

谈谈数据库优化方面的经验看法

[问答题]
1. 加索引
2. sql方面多用子查询,减少数据扫描范围
发表于 2021-09-16 15:41:48 回复(0)

1.多用 LIMIT

很多情况下,我们知道查询表只会有一条结果。在这种情况下,我们不妨加上LIMIT 1,这样可以增加性能。MySQL数据库引擎会在找到一条数据后停止搜索,而不是占据cpu继续往下查直到查询表中的最后一条数据为止。

2.尽量不用ORDER BY RAND()

官方手册提及到ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。

3. EXPLAIN你的SELECT查询

EXPLAIN关键字的作用是让你可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构。从根本处找出可以优化的地方,EXPLAIN的查询结果也会告诉你,你的索引主键被如何利用的,你的数据表是如何被搜索和排序的,通过对这些信息的查看,你可以对自己的查询语句做相应的调整。

4.避免 SELECT *

我们需要哪些属性就取哪些,避免全盘接收。

5. 为搜索字段建索引

索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧。

6.利用查询缓存来优化查询

当MySQL开启了缓存模式(query_cache_type=1)后,mysql会把查询语句和查询结果保存在一张hash表中,下一次用同样的sql语句查询时,mysql会先从这张hash表中获取数据,如果缓存没有命中,则解析sql语句,查询数据库。

7.尽量不使用NOT IN和like语句操作

NOT IN和like“%aaa%”操作都不会使用索引,将进行全表扫描。可取的方法是NOT IN可以NOT EXISTS代替。

8.UNION-ALL代替UNION

如果业务上没有特殊说明,可以考虑用UNION-ALL 替换UNION,因为UNION-ALL不会过滤重复数据,所执行效率要快于UNION,并且UNION可以自动排序,而UNION-ALL不会,这些细节往往都影响了数据库的性能。

发表于 2020-11-25 10:58:06 回复(0)