第一章 面向对象
第二章 异常
第三章 数组
第四章 常用类
第五章 集合
第六章 IO流
第七章 线程
第八章 反射
第九章 Socket编程

中级java面试题之mysql中语句优化部分

 

1、where子句中可以对字段进行null值判断吗?

可以,比如 select id from t where num is null 这样的sql也是可以的。但是最好不要给数据库留NULL,尽可能的使用NOT NULL填充数据库。不要以为NULL不需要空间,比如:char(100) 型,在字段建立时,空间就固定了,不管是否插入值(NULL 也包含在内),都是占用100个字符的空间的,如果是varchar 这样的变长字段,null 不占用空间。可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num= 0。

 

2、select * from admin left join log on admin.admin_id = log.admin_id where log.admin_id>10 如何优化?

优 化 为 : select * from (select * from admin where admin_id>10) T1 left join log on T1.admin_id =log.admin_id。使用 JOIN 时候,应该用小的结果驱动大的结果(left join 左边表结果尽量小如果有条件应该放到左边先处理, right join同理反向),同时尽量把牵涉到多表联合的查询拆分多个 query(多个连表查询效率低,容易到之后锁表和阻塞)。

 

3、limit的基数比较大时使用between场景有那些?

例如

 

select * from admin order by admin_id limit 100000,10

 

优化为

 

select * from admin where admin_time> '2014-01-01′

 

 

 

全部教程