分享传递价值

一个健全的心态比一百种智慧都有力量。

SQL优化

模糊查询前导不会走索引
select id,user_name,price_code from user_activity_info where user_name like '%zhang';
如果非要使用前导索引的话可以借助Apache的Lucence索引工具

字段默认值不要设置成null
如果可以请设置为 not null

不要在SQL中对字段进行计算,这样会使索引失效
select user_name,price_code,create_time from user_activity_info where from_unixtime(create_time) > now();
不要对字段进行隐式转换
select user_name,price_code,create_time from user_activity_info where user_name=12345;
user_name是varchar类型,但是检索匹配值却是int型12345,这样会使user_name的索引失效

复合索引类的第一个字段列必须出现在条件中,复合索引中区分度高的要放在第一列
select id,user_name,price_code,create_time from user_activity_info where user_name="simons";
price_code和user_name是联合索引,但是where条件中只有user_name,且user_name是联合索引的第二列,所以这个SQL不会命中索引

筛选后的数据只有一条也得加上limit 1
select id,user_name,price_code,create_time from user_activity_info where id='256' limit 1;
这样也可以提高SQL效率,减少数据库游标移动

不要在低基数列上建索引,如性别字段,"墙裂"建议在区分度高的字段上建索引

负向查询不会使用索引,会导致全表扫描
select id,user_name,price_code,create_time from user_activity_info where id not in('1','5');
join查询列字段最好相同,否则可能导致发生隐式转换,不命中索引
select a.user_name,b.price_code,create_time from user_activity_info a join reward_info b on a.price_code=b.price_code;
user_activity_info和reward_info表中的price_code字段类型要一致


引申阅读:mysql开发规范

阅读更多

扫码向博主提问

去开通我的Chat快问

fanrenxiang

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • java开发
  • 项目管理
  • 团队建设
版权声明:如果您觉得此文有用或对您有帮助,请不吝点个赞或留个言,哈哈! https://blog.csdn.net/fanrenxiang/article/details/80689824
文章标签: SQL优化
个人分类: Mysql
所属专栏: Mysql
想对作者说点什么? 我来说一句

sql优化

2011年06月14日 31KB 下载

SQL优化 SQL 优化

2010年03月10日 1.2MB 下载

海量数据优化查询SQL

2011年04月02日 80KB 下载

SQL常见的优化

2018年03月30日 4KB 下载

SQL优化 SQL优化

2010年03月06日 1.48MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭