首页 > 数据库技术 > 详细

mysql查询优化

时间:2015-03-27 20:12:46      阅读:229      评论:0      收藏:0      [点我收藏+]

针对mysql查询时反应慢问题,可以在select上做些修改

1 尽量少使用null在where语句中,这样会导致引擎放弃使用索引而进行全表扫描

比如 select id from table where num is null;

 可以改成 select id from table where num=0;


2 在where语句中少使用or连接,这样会导致引擎放弃使用索引而进行全表扫描,

比如 select id from table where num=10 or num=20;

  可以使用 select id from table where num=10 union select id from table where num=20;

in 和not in也要慎用

比如 select id from table where num in (1,2,3);

连续的数值就可以改成 select id from table where num between 1 and 3;


3 如果在 where 子句中使用参数,也会导致全表扫描。因为 SQL 只有在运行时才会解析局部变量,但优 化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项,

比如 select id from table where num=@num;

可以修改为强制查询使用索引 select id from table with (index(索引名)) where num=@num;


4 尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

比如   select id from table where num/2=100;

可以修改成  select id from table where num=100*2;


5 尽量避免在 where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。

比如  select id from table where substring(name,1,3)=‘abc‘;#name 

以 abc 开头的 id应改为:

select id from table where name like ‘abc%‘;


6 可以使用exists代替in 

比如 select num from table where num in(select num from b);

可以修改成 select num from table where exists(select 1 from b where num=a.numm);


7 尽量少用全局 * 这样会致使引擎全表扫描


mysql查询优化

原文:http://boking.blog.51cto.com/8080748/1625696

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!