mysql使用小技巧
1.mySql 删除表中大批量的数据
假设有一个表(logs)有2000万条记录,我们要在业 务不停止的情况下删除其中status=1的所有记录,差不多有1800万条,直接执行 DELETE FROM logs WHERE status=1 会发现删除失败,因为lock wait timeout exceed的错误。因为这条语句所涉及的记录数太多了,因此我们可以分批来删除,比如每10000条进行删除,那么我们可以利用MySQL这样的语句来 完成
DELETE FROM logs WHERE status=1 ORDER BY log_id LIMIT 10000;
然后分多次执行就可以把这1800万条记录成功删除。
2. 对于大量数据查询某条记录是否存在,可使用下面语句避免全表扫描,提高性能
SELECT 1 FROM users WHERE username = 'xx' LIMIT 1
3.join表时尽量缩减记录再连接 如:
select a,b,c from (select A.a,A.b,A.c from A where 条件 )A join ( select c,d,e from B WHERE 条件) B on A.a=B.b
4. 排序时用index代替字段名 会提高效率,适合用于简单表结构,并且知道字段位置
Select * from tbl order by 1,2
5. 关联查询时,如果要查另一个表中是否存在关联数据,我们一般写法可能用到join.
其实可以多用exist 提高性能
Select * from A WHERE EXIST(SELECT 1 from B WHERE A.id=B.id)