mysql 优化

sql 优化
1、建立表尽量用数字型。引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。


2、尽量少并且是合理的where条件。在多个条件的时候,把会提取尽量少数据量的条件放在前面


3、联表查询请给where 或者on的条件加上索引。最好不要用子查询,效率会很低


4、DISTINCT、COUNT、GROUP BY、各种MySQL函数这些操作慎用。
count的使用最好不要用count(*),最好用字段count(id)或者count(1).


5、合理的索引
建索引要建立在经常作为select条件的字段上。并且,值越单一效果越明显。
对于经常会做insert/update/delete的表建立索引要慎重,操作太多对索引的维护工作量也大。
*对那些记录数多的表,建议不要使用外键,以避免造成性能效率的严重降低。
对于使用like的查询,后面如果是常量并且只有%号不在第一字符,索引才能会被使用。如果like后面跟的是一个列的名字,那么索引也不会被使用。
如果列类型是字符串,那么一定记得在where条件中把字符常量值用引号引起来,否则即便这个列上有索引,Mysql也不会使用。因为MYSQL默认把输入的常量值进行转换以后才进行检索。

不要在建立的索引的数据列上进行下列操作:

a.对索引字段进行计算操作

b.在索引字段上使用not,<>,!=

c.在索引列上使用IS NULL和IS NOT NULL

d.在索引列上出现数据类型转换

e.在索引字段上使用函数

f.建立索引的列中使用空值


6、可以使用 exist 和not exist代替 in和not in。

例     SELECT * FROM ORDERS WHERE CUSTOMER_NAME NOT IN (SELECT CUSTOMER_NAME FROM CUSTOMER);

       SELECT *   FROM ORDERS WHERE CUSTOMER_NAME not exist (SELECT CUSTOMER_NAME FROM CUSTOMER);
       
7、不要在where条件中使用or
例如:select id from t where num=10 or num=20
替换:select id from t where num=10 union all select id from t where num=20;


8、在连续的值类,用between and .

select col from  table where time between '2010-06-01 00:00:00'and '2010-06-01 23:59:59'


select col from table where num >= 1 and num <=10;
select col from table where num between 1 and 19 union all select col from table where between 31 and 100;



select col from table where num !=10;

select col from table where num not exist (1,10);

转载于:https://my.oschina.net/u/2369492/blog/639027

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值