【关注微信公众号:跟强哥学SQL,回复“笔试”免费领取大厂SQL笔试题。】
前几天,在我的QQ学习群(209942678)里,有位小伙伴先是甩出两张截图,然后问“我有这些,请问怎样写SQL返回这样的数据?”。
说实话,两张截图看了半天,也没看清楚他有什么,最终想要实现什么逻辑。
事实上,在职场中,提问是一个非常重要的技能。
我们经常需要通过提问来获取信息,解决问题,甚至促进团队的合作。但是,有些人在提问时显得表达混乱,让回答者完全摸不着头脑。试问,这样的提问怎么可能得到满意的回答呢。
高效的提问,不仅是一种技巧,更是对回答者的一种尊重。毕竟,时间才是最稀缺的。如何通过高效的提问,给出尽量多的背景信息,并直击问题本质,让回答者能够快速做出判断,是我们必须要掌握的技能。
第一步:明确你的问题
在提出问题之前,首先需要明确我们的问题到底是什么?
别看这个事情很简单,还真别说,有不少人都无法准确的表达出他所面临的真正问题。
就像上面学习群中的那个小伙伴,问题中的“这些”、“这样”到底是哪些、要怎样呢?也许他自己都说不清楚。
在提问时,使用“这样”、“那边”、“中间”、“这个人”等这类模糊的指代词,很容易让回答者无法快速理解你的问题,从而快速GET到问题的核心。
无法明确表达出自己问题的另一个原因,可能是提问者的知识面不足以准确表达他所面临的问题。
比如,如果不知道像行转列、最左前缀原则、事务、范式、开窗函数等这些SQL开发中经常遇到的一些专有名词,在遇到问题时,又如何准确地向回答者表达出类似的含义呢?
相反,如果你知道想要实现的数据处理效果就是行转列,那么直接在搜索引擎里搜索“SQL 行转列”,就会出现一大堆解决方法。
第二步:尽量多的收集背景信息
在提问之前,了解一些背景信息对于提出问题和回答问题非常重要。收集足够多的信息可以帮助更好地弄清问题的背景,提高问题的准确性和针对性。
毕竟,一个好的提问者不仅要提出问题,还要具备深刻的洞察力和相关的知识储备。
比如,假如你遇到一个SQL运行缓慢的问题,在提问前是不是可以先收集以下信息:
数据库服务器的硬件配置;
数据库中影响SQL执行效率的参数配置值;
数据库正在处理的总请求数;
SQL中使用到的表的数据量、主键、索引;
其实,收集背景信息的过程,也是定位问题的过程,也更能让提问者提出更有深度的问题。
第三步:深入思考并验证
有效的提问需要事前进行一定的思考和验证。
在提问之前,应该要确保问题是准确的,并事先经过了多轮排查验证。这样能够增加问题的信服力和回答的价值,而不是稍微调查一下就会发现的低级错误。
相对于问题“我这句SQL为什么运行的这么慢?”,也许下面这样提问更容易让回答者得出准确的判断或者提出进一步的调查方向:
我使用的是MySQL8.0,数据库服务器配置是16核32G,现在有一张表A,数据量是1000万,主键是字段B、C。字段E上创建了一个普通索引。下面这句对字段E进行过滤查询的SQL执行时,竟然花费了24秒。刚刚我已经查看了服务器的硬件使用情况以及是否有其他的用户正在进行查询,发现目前没有其他用户连接到数据库,并且数据库的硬件资源也很充裕。另外,我还使用Explain工具对这句SQL进行了分析,发现它并没有选择使用索引,反而选择了全表扫描。请问数据库为什么会选择全表扫描而不是使用索引呢?
很明显,假如你是一个回答者,你更愿意回答哪个问题呢?
第四步:清晰明确表达问题
一个好的问题应该是清晰而明确的。通过简洁、简练的语言来表达问题,让回答者能够准确理解你的意图。避免使用非对方专业领域的专业术语及过多的修饰词,那样只会让问题变得模糊不清。
比如这样提问:我在查询中遇到了问题,我试着联接两个表,并且使用了一些过滤条件,但是返回的结果并不是我期望的,可能是由于查询语句的某个部分有错误导致的。我想知道如何正确地编写这样的联接和过滤查询,希望能获取一些关于提高SQL开发能力的指导意见。
纳尼?这是想干啥?是想让我帮你排查当前的这个问题,还是给出一些学习资料、学习方法?
第五步:倾听和尊重回答者
一个优秀的提问者也应该是一个善于倾听的人。在提问过程中,应该要学会倾听,尊重回答者的观点和意见。不要打断别人的发言,给予他们足够的时间来思考和回答你的问题。
经常有遇到一些提问者,在回答者回答到一半时,就迫不及待的打断“不是这样的,。。。”。
暂且不说,也许回答者确实理解有些偏差的地方,但如果总是被提问者否定,会严重打击回答者的积极性。毕竟在现实生活中,之所以回答者愿意主动回答你的问题,大部分是希望能得到提问者的肯定,从而满足回答者小小的虚荣心。
如果回答者在回答问题时,得到的反而是否定、打击、不尊重,那么这场讨论,大概率得不到圆满的结果。
【关注微信公众号:跟强哥学SQL,回复“笔试”免费领取大厂SQL笔试题。】