数据库应用优化(一)
1.尽量避免在列上进行运算,这样会导致索引失效。例如原句为:
SELECT * FROM table WHERE YEAR(d) >= 2019;
//优化为
SELECT * FROM table WHERE d>='2019-01-01'
2.使用JOIN时,应该用小结果集驱动打大结果集。同时把复杂的JOIN查询拆分多个Query。因为JOIN多个表时,可能导致更多的锁定和堵塞。例如原句为:
SELECT * FROM a JOIN b ON a.id=b.id
LEFT JOIN c ON c.time = a.date
LEFT JOIN d ON c.pid=b.aid
LEFT JOIN e ON e.cid=a.did
3.注意like模糊查询的时,避免%%,SQL语句并未用到索引,而且是全表搜索。例如原句为:
SELECT * FROM table WHRER name LIKE '%keyword%'
//优化为
SELECT column FROM table WHERE name like ‘keyword%’
-
查询时尽量用自己需要的字段,这对查询速度不会有什么影响,但可以节省内存。例如原句为:
SELECT * FROM table //优化为 SELECT username,password FROM table
5.批量插入语句节省交互。例如原句为:
INSERT INTO (id,name) VALUES (1,a);
INSERT INTO (id,name) VALUES (2,b);
INSERT INTO (id,name) VALUES (3,c);
//优化为
INSERT INTO (id,name) VALUES (1,a), (2,b),(3,c)
6.limit基数比较大时使用between。例如原句为:
SELECT username,password FROM table limit 1000000,10
//优化为
SELECT username,password FROM table where id between 1000000 and 1000010
//between限定比limit快,所以海量数据访问时,建议用between或者where替换掉limit,但是between也有缺陷,如果id不连续。总读取的数据会少于预计数据
7.建议不实用rand随机获取多条记录
8.避免使用NULL
9.不要使用count(id),可以直接count(*)
10.不要做无所谓的排序操作
还有一些索引的合理使用
♦️合理设计和使用索引
♦️在关键字的索引上,建与不建索引,查询速度相差100倍
♦️差的索引和没有索引效果一样
♦️索引并非越多越好,因为维护索引需要成本
♦️每个表的索引应在5个以下,应合理利用部分索引和联合索引
♦️不在结果集中的结果单一的列上建立索引
♦️建索引的字段结果集最好分布均匀,或者符合正态分布
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: