sql使用技巧

张开发
2026/4/13 1:43:15 15 分钟阅读

分享文章

sql使用技巧
目录一、查询SQL尽量不要使用select *而是具体字段二、避免在where子句中使用 or 来连接条件三、尽量使用数值替代字符串类 型四、使用varchar代替char五、技术延伸char与varchar2的区别六、避免在where子句中使用!或操作符一、查询SQL尽量不要使用select *而是具体字段①错误示范SELECT * FROM user②使用技巧SELECT id,username,tel FROM user③why节省资源、减少网络开销。可能用到覆盖索引减少回表提高查询效率。二、避免在where子句中使用 or 来连接条件①错误示范SELECT * FROM user WHERE id1 OR salary5000②使用技巧1分开两条sql写SELECT * FROM user WHERE id1 SELECT * FROM user WHERE salary5000③why1 使用or可能会使索引失效从而全表扫描2 对于or没有索引的salary这种情况假设它走了id的索引但是走到salary查询条件时它还得全表扫描3 也就是说整个过程需要三步全表扫描索引扫描合并。如果它一开始就走全表扫描直接一遍扫描就搞定4 虽然mysql是有优化器的出于效率与成本考虑遇到or条件索引还是可能失效的三、尽量使用数值替代字符串类 型①使用方法主键idprimary key优先使用数值类型inttinyint 性别sex0代表女1代表男数据库没有布尔类型mysql推荐使用tinyint③why1 因为引擎在处理查询和连接时会逐个比较字符串中每一个字符2 而对于数字型而言只需要比较一次就够了3 字符会降低查询和连接的性能并会增加存储开销四、使用varchar代替char①错误示范address char(100) DEFAULT NULL COMMENT 地址②使用技巧address varchar(100) DEFAULT NULL COMMENT 地址③why1 varchar变长字段按数据内容实际长度存储存储空间小可以节省存储空间2 char按声明大小存储不足补空格3 其次对于查询来说在一个相对较小的字段内搜索效率更高五、技术延伸char与varchar2的区别1、char的长度是固定的而varchar2的长度是可以变化的。比如存储字符串“101”对于char(10)表示你存储的字符将占10个字节包括7个空字符在数据库中它是以空格占位的而同样的varchar2(10)则只占用3个字节的长度10只是最大值当你存储的字符小于10时按实际长度存储。2、char的效率比varchar2的效率稍高。3、何时用char何时用varchar2?char和varchar2是一对矛盾的统一体两者是互补的关系varchar2比char节省空间在效率上比char会稍微差一点既想获取效率就必须牺牲一点空间这就是我们在数据库设计上常说的“以空间换效率”。varchar2虽然比char节省空间但是假如一个varchar2列经常被修改而且每次被修改的数据的长度不同这会引起“行迁移”现象而这造成多余的I/O是数据库设计中要尽力避免的这种情况下用char代替varchar2会更好一些。char中还会自动补齐空格因为你insert到一个char字段自动补充了空格的,但是select后空格没有删除因此char类型查询的时候一定要记得使用trim这是写本文章的原因。如果开发人员细化使用rpad()技巧将绑定变量转换为某种能与char字段相比较的类型当然与截断trim数据库列相比填充绑定变量的做法更好一些因为对列应用函数trim很容易导致无法使用该列上现有的索引可能必须考虑到经过一段时间后列长度的变化。如果字段的大小有变化应用就会受到影响因为它必须修改字段宽度。正是因为以上原因定宽的存储空间可能导致表和相关索引比平常大出许多还伴随着绑定变量问题所以无论什么场合都要避免使用char类型。六、避免在where子句中使用!或操作符①错误示范SELECT * FROM user WHERE salary!5000 SELECT * FROM user WHERE salary5000why1 使用!和很可能会让索引失效2 应尽量避免在where子句中使用!或操作符否则引擎将放弃使用索引而进行全表扫描3 实现业务优先实在没办法就只能使用并不是不能使用

更多文章