对于数据量很大的查询操作,怎么提高查询速度
- 对表建立索引
- 分表查询
按时间分。典型应用:新闻类、qq状态、朋友圈动态等关注实时或最近的,可以用时间划分,比如当月一张表,上个月一张表。按区间分。通常每张表都会有个自增id,可以利用自增id分,比如user1表是150,user2表是51100
truncate和delete的区别
- truncate table和drop table的区别是,前者会保留表结构,只清除表数据,后者删除表结构和表数据
- truncate table的功能和不带where的delete在效果上是一样的,都是把表中的所有记录删除。但是,delete是一行一行删,每一行的删除都会记录到操作日志里,而且是事务的,可以回滚,如果对删除操作定义了trigger,则会触发trigger。truncate是一次性删除,是直接释放存储表中记录的数据页,非事务的,所以有风险,最好备份,不会触发删除trigger,速度快。
- truncate只能对table进行操作,而delete可以对table和view操作
- truncate清除表数据后,新的记录id从0开始,delete清除数据后,id延续着以前的
- drop和truncate是DDL,delete是DML
- 当表被truncate 后,这个表和索引所占用的空间会恢复到初始大小,delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉
同步和异步的区别以及优缺点
- 同步:多线程环境且操作共享数据时使用,串行处理,有线程在处理,后面的线程就得等着,可以保证数据的安全性,缺点是后面的线程体验差
- 异步:资源有限的情况下,可以提高资源的使用率;可以提高程序的健壮性,不会因为一个线程挂了导致整个程序都崩了;改善用户体验。缺点是线程的创建,切换,销毁会有一定的系统开销,滥用多线程会影响程序的性能;增加编程的复杂度