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');