不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(...)
很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,
因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。
一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
相关文章
- 11-15MMORPG大型游戏设计与开发(客户端架构 part3 of vegine)
- 11-15Android Jetpack中Paging3 从网络和数据库加载页面
- 11-15【JDK】【3】报错:has value '1.8', but '1.7' is required
- 11-15mybatis动态sql语句学习
- 11-15SQL存储过程详解
- 11-1513 在 Django REST framework 善用 SerializerMethodField 来优化不必要的查询
- 11-15SQL高效查询两个表不同的数据
- 11-15IM 会话列表卡顿优化实践,干货满满
- 11-15阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践
- 11-15狗狗币两日10倍,瑞波3日翻倍,VAST上线后会翻多少倍?