mysql优化

参考 :

http://blog.chinaunix.net/uid-20708886-id-4064033.html

https://blog.csdn.net/weixin_42661074/article/details/89923289

1、不建议使用场景

①不常用的列,若建立索引会增大空间需求,实用性不高;

②枚举类型的列或者很少值的列,并不能提高效率;

③数据表操作(增、删、改)远大于查询时不建议创建索引。

④数据类型:text、image、bit类型;

①不常用的列,若建立索引会增大空间需求,实用性不高;

②枚举类型的列或者很少值的列,并不能提高效率;

③数据表操作(增、删、改)远大于查询时不建议创建索引。

④数据类型:text、image、bit类型;

2、替换like的几种方法

1.LOCATE语句
SELECT column from table where locate(‘keyword’, condition)>0 

2.locate 的別名 position
POSITION语句
SELECT column from table where position(‘keyword’ IN condition) 

3.INSTR语句
SELECT column from table where instr(condition, ‘keyword’ )>0 

4.以字段开头模糊查询的left(字段,长度)的方法查询
select * from t  where left(t.user_code, 1)='A';

5.findinset
select * from t  where FINDINSET('1',t.name);//t.name所查询的字段,所有包含1的数据

3、用in代替or

IN()相当于多个OR,因为IN和OR在逻辑上是等同的。
[1] 对IN列表中的数值进行排序。
[2] 对于查询的匹配,每次使用二分查找去匹配IN列表的数值。
所以对于第[2]步,每次比较的算法复杂度大概为O(log n)。相反,对于同样逻辑的OR列表,每次都要遍历,所以OR相应的算法复杂度为O(n)(因此对于遍历非常大的OR列表,会很缓慢!)。

因此,在了解了IN和OR的区别之后,每次优化,我们可以采用如下方式:
1.尽量将能使用IN来代替OR查询。
2.对IN列表中的数据,写SQL的时候排好序,避免MySQL来做这个工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值