避免Select all如果不查询表中所有的列,避免使用SELECT *,它会进行全表扫描,不能有效利用索引 。
Like优化like用于模糊查询,举个例子(field已建立索引):
SELECT column FROM table WHERE field like '%keyword%';
这个查询未命中索引,换成下面的写法:
SELECT column FROM table WHERE field like 'keyword%';
去除了前面的%查询将会命中索引,但是产品经理一定要前后模糊匹配呢?全文索引fulltext可以尝试一下,但Elasticsearch才是终极武器 。
Join优化join的实现是采用Nested Loop Join算法,就是通过驱动表的结果集作为基础数据,通过该结数据作为过滤条件到下一个表中循环查询数据,然后合并结果 。如果有多个join,则将前面的结果集作为循环数据,再次到后一个表中查询数据 。
驱动表和被驱动表尽可能增加查询条件,满足ON的条件而少用Where,用小结果集驱动大结果集 。被驱动表的join字段上加上索引,无法建立索引的时候,设置足够的Join Buffer Size 。禁止join连接三个以上的表,尝试增加冗余字段 。微信搜索web_resource 关注获取更多推送 。
Limit优化limit用于分页查询时越往后翻性能越差,解决的原则:缩小扫描范围,如下所示:
select * from orders order by id desc limit 100000,10
耗时0.4秒
select * from orders order by id desc limit 1000000,10
耗时5.2秒
先筛选出ID缩小查询范围,写法如下:
select * from orders where id > (select id from orders order by id desclimit 1000000, 1) order by id desc limit 0,10
耗时0.5秒
如果查询条件仅有主键ID,写法如下:
select id from orders where id between 1000000 and 1000010 order by id desc
耗时0.3秒
如果以上方案依然很慢呢?只好用游标了,感兴趣的朋友阅读JDBC使用游标实现分页查询的方法
其他数据库作为一名后端开发人员,务必精通作为存储核心的MySQL或SQL Server,也要积极关注NoSQL数据库,他们已经足够成熟并被广泛采用,能解决特定场景下的性能瓶颈 。
文章插图
结语
就以这段话自勉、共勉吧 。越努力、越幸运,如果你不是官二代、富二代、红二代,那么请记住:勤奋才是改变你命运的唯一捷径 。
欢迎在留言区留下你的观点,一起讨论提高 。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人 。-- 完 --
推荐阅读
- 如何用30分钟搭一个wordpress网站?
- 什么是 Lambda?该如何使用?
- 乌克兰|2022 年年轻人如何找到满意的工作?
- 君山银针产地,如何鉴别君山银针
- 君山银针产区,如何鉴别君山银针
- 霍山黄芽如何鉴别好坏,如何鉴别真假霍山黄芽
- 如何存储霍山黄芽呢,霍山黄芽如何辨别
- 家居装修中装修工人如何占便宜
- 蜜香红茶,如何区分各种红茶
- 相敬如宾是夫妻关系好还是不好 相敬如宾的意思