mysql面试--数据库优化
来源:互联网 发布:网络打印机安装失败 编辑:程序博客网 时间:2024/06/08 19:43
Mysql数据库的优化一般从sql及索引优化、表结构优化、系统配置优化、硬件优化四个方面来考虑
表结构优化:
1. 避免使用NULL
NULL对于大多数数据库都需要特殊处理,MySQL也不例外,它需要更多的代码,更多的检查和特殊的索引逻辑,有些开发人员完全没有意识到,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默认值。
2. 尽可能使用小的字段:
MySQL从磁盘读取数据后是存储到内存中的,然后使用cpu周期和磁盘I/O读取它,这意味着越小的数据类型占用的空间越小,从磁盘读或打包到内存的效率都更好,但也不要太过执着减小数据类型,要是以后应用程序发生什么变化就没有空间了。修改表将需要重构,间接地可能引起代码的改变,这是很头疼的问题,因此需要找到一个平衡点。如能使用char类型的,就不要使用varchar类型
3. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
sql及索引优化:
1. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
3.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
4. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
5.下面的查询也将导致全表扫描:
select id from t where name like '%abc%'若要提高效率,可以考虑全文检索。
6..in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
7.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where datediff(day,createdate,'2005-11-30')=0--'2005-11-30'生成的id ,应改为
select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'
8.索引建立:
表记录太少,经常插入、删除、修改的表,数据重复以及分布平均的表字段,不适合建立索引
- mysql面试--数据库优化
- Java面试准备十六:数据库——MySQL性能优化
- 常见面试数据库优化
- 数据库优化面试整理
- 面试及mysql优化
- mysql 索引 优化 面试
- mysql数据库面试总结
- mysql数据库面试总结
- mysql数据库面试总结
- MySql数据库面试
- 数据库的优化-应付面试
- [面试]常考数据库优化
- MYSQL数据库查询优化
- mysql数据库优化
- MySQL数据库优化
- mysql数据库优化(转)
- 优化 MySQL 数据库
- 优化MySQL数据库查询
- 匿名内部类的使用
- 《深入理解计算机系统》(原书第三版)家庭作业第三章(3.59)解答
- AsyncTask源码分析
- LintCode 174:Remove Nth Node From End of List
- CSS基础(一)--选择器与权重计算
- mysql面试--数据库优化
- C++初始化列表和构造函数体的区别
- Algorithm Notes (六)Linear List
- ios 上传下载
- Scikit-Learn框架
- Unity协同使用初步总结(StartConroutine_IEnumerator & IEnumeratable)
- Ubuntu Server 命令行下显示中文乱码(菱形)解决办法
- Azure Web应用服务访问Oracle数据库
- Effective STL 17 Use "the swap trick" to trim excess capacity