百科问答小站 logo
百科问答小站 font logo



怎样才能写出高质量的SQL语句? 第1页

  

user avatar   a-li-ba-ba-tao-xi-ji-zhu 网友的相关建议: 
      

阿里工程师分享9个自己写SQL的好习惯。亲身实践所得,欢迎讨论交流。


【点击头像关注我们知乎号,别错过更多阿里工程师一线技术干货。】

——————————————————————————————————————


1、查询中尽量避免使用SELECT * 以及加上LIMIT限制

当服务器响应客户端请求时,客户端必须完整的接收整个返回结果,而不能简单的只取前面几条结果,然后让服务器停止发送。查询应尽可能只返回必要数据,减小通信数据包大小和数量,提高效率。


2、IN 和 NOT IN 要慎用,会导致全表扫描。



上面例子使用 IN 时可以用到索引,使用 NOT IN 时未使用索引。


上面例子使用 IN 时未使用索引。


MySQL优化器会选择代价最小的方式执行,IN和NOT IN 都可能索引失效,不是绝对的。


3、LIKE 导致全表扫描


LIKE导致索引失效是因为没遵循最佳左前缀法则。字符串B-Tree排序方式:先按照第一个字母排序,如果第一个字母相同,就按照第二个字母排序,以此类推。

%号放右边
由于B-Tree的索引顺序,是按照首字母的大小进行排序,前缀匹配又是匹配首字母。所以可以在B+树上进行有序的查找,查找首字母符合要求的数据。所以有些时候可以用到索引。


4、联合索引需遵循最佳左前缀法则


GLS_CODE,BARCODE,SKU_ID 创建了联合索引,当查询语句where条件中没有GLS_CODE列不会走联合索引。创建这种多列联合索引时,列的顺序非常重要。


B-Tree联合索引组合顺序与创建时列的顺序是一样的,第一个字段列的顺序是确定的,其他列的顺序都是不确定的。B-Tree索引的限制,如果查询不是按照索引创建时的顺序,则无法使用索引。


在查询中where条件里存在联合索引第一列,顺序不一致也是可以走索引的。这里是因为MySQL优化器会对查询重新排序。


5、不要在索引列上做任何操作


索引列存在计算、函数、类型转换,会导致索引失效进行全表扫描。


6、is null,is not null可能导致索引失效


7、要注意where,order by,group by后面的列,多表关联的列是否已加索引,优先考虑组合索引


添加索引


8、where后面的列要注意隐式转换,会导致索引失效


不加单引号时,是字符串跟数字的比较,它们类型不匹配,MySQL会做隐式的类型转换,把它们转换为浮点数再做比较,最后导致索引失效。


9、count(*) 和 count(1) 的误解


dev.mysql.com/doc/refma
count(*) 和 count(1) 效率是完全一样的,并没有count(1)会比count(*)快的说法。


(本篇作者:阿里巴巴天猫奢品运营中心 乂嵘)

——————————————————————————————————————————

阿里巴巴集团淘系技术部官方账号。淘系技术部是阿里巴巴新零售技术的王牌军,支撑淘宝、天猫核心电商以及淘宝直播、闲鱼、躺平、阿里汽车、阿里房产等创新业务,服务9亿用户,赋能各行业1000万商家。我们打造了全球领先的线上新零售技术平台,并作为核心技术团队保障了11次双十一购物狂欢节的成功。详情可查看我们官网:阿里巴巴淘系技术部官方网站

点击下方主页关注我们,你将收获更多来自阿里一线工程师的技术实战技巧&成长经历心得。另,不定期更新最新岗位招聘信息和简历内推通道,欢迎各位以最短路径加入我们。




  

相关话题

  有哪种工作不体面却很挣钱? 
  领导问你忙不忙,怎么回答最好? 
  在跟同事的沟通中,被对方称呼为「情绪的奴隶」是否是人身攻击? 
  新工作很满意但是要长时间久坐,腰有问题的我该不该离职?前途和健康哪个更重要? 
  2022 年三十岁的男人月薪一万多算什么水平? 
  在职场上怎么和领导交流,既显得礼貌而又让人不反感? 
  如何看待网传「阿里一总裁 PPT 被员工拍屏泄露,新规划遭曝光」这件事?员工是否要承担法律责任? 
  你听过领导说过最让你遍体生寒的话是什么? 
  员工拒绝在线打卡遭开除,后法院判决公司支付员工 4 万元,背后的法律依据是什么? 
  老板开会,一方面让有时间多陪陪家人;一方面又无情的压榨你的剩余时间,这是什么逻辑? 

前一个讨论
电脑怎样执行编程语言的?
下一个讨论
计算机专业到底是不是“围城”?





© 2024-05-19 - tinynew.org. All Rights Reserved.
© 2024-05-19 - tinynew.org. 保留所有权利