mysql使用注意事项

2018-05-10  本文已影响0人  swoft_

持续更新

索引失效5大原因

  1. like %开头
  2. where 中列使用函数
  3. or 查询中有不是索引列(联合索引)
  4. 隐式转换
  5. 最左原则

千万级数据优化4个层级

  1. sql优化,索引优化
  2. 加缓存
  3. 读写分离(提高并发)
  4. 分库分表

复杂的join查询应该分成多个单个查询

JOIN 多个表,可能导致更多的锁定和堵塞
内网创建连接,发起查询时间是可以不计的,所以不需要关注这个时间。
程序要尽量简单易懂,不应该写过于复杂的sql

join会锁表,所以建议少用

-- 下面2种情况会锁住table2
delete table1  from table1 inner join table2  on table1.id=table2.id  … 
update tabel1,table2 set table1.name=’feie’ where table1.id=table2.id and table1.id=1; 

空值与NULL的区别

空值不一定为空 例如:如果将一个空值的数据插入到TimesTamp类型的字段中,空值就不一定为空。结果显示的却是插入记录的当前时间

空值不一定等于空字符

null 和任何值都不相同,所以 null值的判断不能使用'=' 号,使用is null is not null (索引不会失效,一定亲自测试一下)

分页的优化

假如有类似下面分页语句:
SELECT FROM table1 ORDER BY ftime DESC LIMIT 10000,10;
这种分页方式会导致大量的io,因为MySQL使用的是提前读取策略。

推荐分页方式:
SELECT FROM table1 WHERE ftime < last_time ORDER BY ftime DESC LIMIT 10 (传入上一次分页的界值)

内连接
SELECT * FROM table as t1 inner JOIN (SELECT id FROM table ORDER BY time LIMIT 10000,10) as t2 ON t1.id=t2.id

上一篇下一篇

猜你喜欢

热点阅读