查询内比较值与查询后比较值,哪种方式运行速度更快?
哪种SQL查询方式更快?
毫无疑问,方式一的速度会快得多,而且这是数据库查询的最佳实践,原因主要有这几个关键点:
数据库的筛选效率远高于应用层:数据库是专门为数据检索和过滤优化的,尤其是当你在
locale和number_field上建立了合适的索引时,数据库可以直接通过索引快速定位到同时满足locale='US'和number_field>0的记录,完全不需要扫描所有locale='US'的数据。而方式二是先把所有符合locale='US'的记录全部拉到应用端,再在代码里做判断,相当于把本该数据库做的工作丢给了应用程序,效率差很多。减少不必要的数据传输:方式一只会返回符合条件的记录,数据量更小;而方式二会返回所有
locale='US'的记录——哪怕其中大部分number_field都是小于等于0的,这些无用数据的传输会浪费数据库和应用之间的网络带宽,尤其是当这类记录数量很大时,传输耗时会非常明显。降低应用端的处理压力:就算你的
locale='US'记录不多,方式二也需要先接收所有数据再做判断,而方式一直接拿到的就是你需要的结果,应用端只需要处理有效数据即可。另外注意你的方式二代码里用了mysql_fetch_assoc($result),这其实只取了查询结果的第一条记录,逻辑上可能和方式一不一致(方式一是处理所有符合条件的记录),这也是个隐藏问题。
简单来说:尽量让数据库完成数据筛选的工作,它比应用层擅长得多。
内容的提问来源于stack exchange,提问作者user2557039
相关产品推荐
相关产品推荐

