sql性能優化

1.不使用子查詢

例:select * from t1 where id (select  id  from t2 where  name='lee');

例:select * from t1 where id=1

2.避免函數索引

例:select * from t where  year(d)>=2016;由於MySql不像Oracle那樣支持函數索引,即使d字段有索引,也會直接全表掃描。

應該改爲:

select * from  t  where d>='2016-01-01';

mysql是不支持函數索引的,因此我們在做查詢的時候儘量的避免使用函數索引

3.用IN來替換OR

低效查詢

select  * from t where LOC_ID=10 OR  LOC_ID=20 OR LOC_ID=30;

高效查詢

select  *  from t where  LOC_ID  IN(10,20,30);

4.LIKE雙百分號無法使用到索引

select  *  from  t  where  name  like  '%lee%';

--如果查詢條件前面添加了百分號,那麼會導致在查詢的時候無法使用索引

select * from t where name like 'lee%';

5.讀取適當的記錄 limit  m,n 

select *  from  t where 1;

select *  from  t where  1  limit  10

6.避免數據類型不一致

select *  from t  where id='19';

select * from t   where id=19;

7.分組統計可以禁止排序

SELECT goods_id,count(*) FROM t GROUP BY goods_id;

默認情況下,MySQL對所有GROUP BY col1,col2…的字段進行排序。如果查詢包括GROUP BY,想要避免排序結果的消耗,則可以指定ORDER BY NULL禁止排序。

SELECT goods_id,count(*) FROM t GROUP BY goods_id ORDER BY NULL;

8.批量insert插入
insert  into  t(id,name) values(1,'bill');

insert into  t(id,name) values(2,'tom');

insert into  t(id,name) values(3,'lee');

-->

insert into t(id,name) values(1,'bill'),(2,'tom'),(3,'lee');

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章