mysql数据库面试总结(一)

1、数据库优化 

1)数据库范式

  第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。

  如电话列可进行拆分---家庭电话、公司电话

  第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

  

  第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。 

比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)

拆开来,如下。

(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

满足这些规范的数据库是简洁的、结构明晰的;同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。  

2)数据类型选择

  数字类型:   

Float和double选择(尽量选择float)

区分开TINYINT / INT / BIGINT,能确定不会使用负数的字段,建议添加 unsigned定义

能够用数字类型的字段尽量选择数字类型而不用字符串类型的

字符类型

  char,varchar,TEXT的选择:非万不得已不要使用 TEXT 数据类型,定长字段,建议使用 CHAR 类型(填空格),不定长字段尽量使用 VARCHAR(自动适应长度,超过阶段),且仅仅设定适当的最大长度

时间类型

  按选择优先级排序DATE(精确到天)、TIMESTAMP、DATETIME(精确到时间)

ENUM

  对于状态字段,可以尝试使用 ENUM 来存放

 避免使用NULL字段,很难查询优化且占用额外索引空间

 

 

3)字符编码

    同样的内容使用不同字符集表示所占用的空间大小会有较大的差异,所以通过使用合适的字符集,可以帮助我们尽可能减少数据量,进而减少IO操作次数。  

1.纯拉丁字符能表示的内容,选择 latin1 字符编码

2.中文可选用utf-8

3.MySQL的数据类型可以精确到字段,所以当我们需要大型数据库中存放多字节数据的时候,可以通过对不同表不同字段使用不同的数据类型来较大程度减小数据存储量,进而降低 IO 操作次数并提高缓存命中率

 

 

2、Sql优化 

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。	2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:	select id from t where num is null	
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:	select id from t where num=0
3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。	4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:	select id from t where num=10 or num=20	
可以这样查询:	select id from t where num=10	union all	select id from t where num=20	5.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	6.下面的查询也将导致全表扫描:	select id from t where name like '%abc%'	7.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:	select id from t where num/2=100	
应改为:	select id from t where num=100*2	8.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:	select id from t where substring(name,1,3)='abc'--name以abc开头的id	
应改为:	select id from t where name like 'abc%'	9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。	10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,	
否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。	11.不要写一些没有意义的查询,如需要生成一个空表结构:	select col1,col2 into #t from t where 1=0	
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:	create table #t(...)	12.很多时候用 exists 代替 in 是一个好的选择:	select num from a where num in(select num from b)	
用下面的语句替换:	select num from a where exists(select 1 from b where num=a.num)	13.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,	
如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。	14.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,	
因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。	
一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。	15.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。	
这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。	16.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,	
其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。	17.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。	18.避免频繁创建和删除临时表,以减少系统表资源的消耗。
 
19.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。	20.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,	
以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
 
21.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。	22.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。	23.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。
 
24.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。
在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。
25.尽量避免大事务操作,提高系统并发能力。

26.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

3、索引优化 

1)、 创建索引,

  以下情况不适合建立索引

  • 表记录太少
  •  经常插入、删除、修改的表
  •  数据重复且分布平均的表字段

2)、 复合索引

  如果一个表中的数据在查询时有多个字段总是同时出现则这些字段就可以作为复合索引

索引

  索引是对数据库表中一列或多列的值进行排序的一种结构。  

优点:

l 大大加快数据的检索速度

l 创建唯一性索引,保证数据库表中每一行数据的唯一性

l 可以加速表和表之间的连接

缺点:

l 索引需要占物理空间。

l 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,

降低了数据的维护速度

索引分类:

l 普通索引

create index zjj_temp_index_1 on zjj_temp_1(first_name);

drop index zjj_temp_index_1;

l 唯一索引,索引列的值必须唯一,但允许有空值

create unique index zjj_temp_1  on zjj_temp_1(id);

l 主键索引,它是一种特殊的唯一索引,不允许有空值。

  l 组合索引

 

参考博客:https://www.jianshu.com/p/5052f6a454ef

     http://blog.csdn.net/jie_liang/article/details/77340905 

      https://www.cnblogs.com/wmbg/p/6800354.html

 

 

转载于:https://www.cnblogs.com/huststl/p/8280412.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

思科路由器IKEV2 L2L***预共享密码认证最简化配置

一.概述:思科路由器对于IKEV2&#xff0c;是有很多预配的&#xff0c;因此可以很少的配置就能完成IKEV2的配置。二.基本思路&#xff1a;A.两边都用SVTI的方式配置Flex ***B.没有用动态路由&#xff0c;配置静态路由,如果一边用DVTI&#xff0c;则需要两边配置静态路由三.测试拓…

Oracle存储过程学习

存储过程创建语法&#xff1a; create or replace procedure 存储过程名&#xff08;param1 in type&#xff0c;param2 out type&#xff09; as 变量1 类型&#xff08;值范围&#xff09;; 变量2 类型&#xff08;值范围&#xff09;; Begin Select count(*) into 变量1 fro…

关于通过Sql注入直接拖数据的讨论

和谐社会&#xff0c;拒绝***。 最近在老外的Blog上逛&#xff0c;突然发现我一直以来Dump数据的态度终于得到了某些老外的认可&#xff0c;通过Sql注入点直接拖下数据库是可行的。而且很多老外已经开始开发这方面的直接Dump数据的工具&#xff0c;并讨论相关的算法。很多人说行…

php mysql_query返回,php的mysql_query()函数处理以下( )指令成功就可以返回查询后的结果集。...

【多选题】皮亚杰认为影响发展的因素有( )。【单选题】关于宽带薪酬设计说法错误的是( )【判断题】《省煤炭厅2000年度工作总结》是一个文章式总结的标题。( )【单选题】小儿惊厥最常见的原因是:【单选题】The shipping company makes a notation such as “5 cartons have bee…

php-fpm配置笔记

Posted on 2013 年 2 月 27 日 3,070 Views 不得不说,英文不好弄linux服务器有时是挺痛苦的,苦逼的博主没好好学习英文,导致被lnmp折腾的够呛. php-fpm配置不当&#xff0c;导致服务器经常出现502错误&#xff0c;上个学期多次调整都没有解决&#xff0c;网上找来资料&#xff…

php xcat createadmin,php xcat update升级后出错,不知怎么弄

恢复再次升级&#xff0c;同样的错误&#xff0c;没法升级了吗Fetching originremote: Enumerating objects: 353, done.remote: Counting objects: 100% (353/353), done.remote: Compressing objects: 100% (3/3), done.remote: Total 802 (delta 350), reused 350 (delta 35…

JNDI(datasource)在tomcat,JBOSS下的spring+quartz配置

由于项目中多个小应用&#xff08;类似插件&#xff09;需要使用数据库连接池&#xff0c;不能为每一个应用中配置连接池。故采用JNDI的模式进行配置。 我们使用的web服务器有tomcat和jboss两种。分别介绍其在这两种服务器下并且在两种应用模式springhebernat与quartz下的配置。…

UVA10561 Treblecross

Treblecross 题目大意&#xff1a;给定一个带有.和X的字符串作为初始局面&#xff0c;两人轮流游戏&#xff0c;将.修改为X&#xff0c;当一个人放下X后&#xff0c;出现三个连续的X&#xff0c;游戏接触&#xff0c;放下X的人获胜。判断先手必胜还是必败&#xff0c;并给出第一…

解决VS2005 远程工具无法通过同步软件连接S5pv210 样机的问题

居然无法连接&#xff0c;记得以前遇到过的 1 分钟前 上传下载附件 (58.21 KB)后来还是看MSDN解决了MSDN连接如下http://msdn.microsoft.com/en-us/library/ee480836.aspx——Troubleshooting a Connection to a Target Device That Uses Platform Manager 转载一下sunrain_hjb…

matlab画曲面二次,如何用matlab绘制二次B样条三维曲面(已知控制点和节点矢量)?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼小弟初来乍到&#xff0c;现在需要用matlaB绘制二次B样条曲面&#xff0c;现在已知信息&#xff1a;小弟做这个已经一个星期了&#xff0c;现在无任何进展&#xff0c;现在是万分着急&#xff0c;希望高手们给小弟指点一二&#xf…

一些应该记住的东西(持续更新?再也不会更新了)

没什么用的目录 1.积性函数与杜教筛 2.搜索的几种优化与考试期望得分 3.乱讲 4.模拟退火系列 5.生成函数系列 2018.1.18 首先写写数学方面的吧(因为现在在学)……毕竟这里面的公式浩如烟海…… 对着表推了十分钟愣是没发现……明明上午还证明过…… 还有就是通过算贡献化简一些…

传说中的window8 的种子

2019独角兽企业重金招聘Python工程师标准>>> 趁着更新服务器最后时刻 发个种子 有兴趣的可以去看看 http://dl.dbank.com/c03a8fck07 转载于:https://my.oschina.net/qutterrtl/blog/28368

oracle 触发器 merge,[OT]函数|过程|触发器|插入(insert)|修改(Merge)

CREATE TABLE errlog(Errcode NUMBER,Errtext CHAR(40));--1,创建函数&#xff1a;CREATE OR REPLACEFUNCTION get_salary (p_deptno NUMBER ) RETURN NUMBER AS v_sal NUMBER;BEGINIF p_deptno IS NULL THENRAISE_APPLICATION_ERROR(-20991,Department number is null);ELSIF …

苏州飘“彩云” 五年规模破百亿元

7月12日在苏州举行的国际云计算与移动互联网应用研讨会的重头戏之一&#xff0c;是苏州科技城 “彩云计划”的发布。由硅谷云计算卓越中心&#xff08;CoE&#xff09;与苏州科技城联合设立的苏州科技城云计算卓越中心同时成立。苏州科技城云计算卓越中心的建立是“彩云计划”落…

php 生成导出excel,PHP导出生成EXCEL文件

PHP导出生成EXCEL文件// 解决中文乱码所做的编码转换function xecho($content){echo mb_convert_encoding($content,"gbk","auto");}// 必须要的基本headerheader("Content-Type: application/vnd.ms-excel; charsetutf-8");header("Conten…

linux 内核 内存管理 slub算法 (一) 原理

http://blog.csdn.net/lukuen/article/details/6935068转载于:https://www.cnblogs.com/zengkefu/p/8320429.html

用户配置文件

问&#xff1a;什么是用户配置文件? 答&#xff1a;用户配置文件就是在用户登录时定义系统加载所需环境的设置和文件的集合。它包括所有用户专用的配置设置&#xff0c;如程序项目、屏幕颜色、网络连接、打印机连接、鼠标设置及窗口的大小和位置。 当你第一次登录到一台基于…

oracle00109,ORA-01034: 、ORA-01078: 和 LRM-00109: 的解决方法,ora-01034ora-01078

ORA-01034: 、ORA-01078: 和 LRM-00109: 的解决方法&#xff0c;ora-01034ora-01078环境&#xff1a;Linux 5.4 Oracle 11.2.0.3在Linux上连接Oracle时遇到报错&#xff1a;SQL> show parameter sgaORA-01034: ORACLE not availableProcess ID: 0Session ID: 0 Serial numbe…

listView 多布局

最近在开发项目中遇到了实现类似淘宝首页的需求&#xff0c;使用listView可以解决&#xff0c;在此记录一下。 实现步骤&#xff1a; 重写 getViewTypeCount() – 返回你有多少个不同的布局重写 getItemViewType(int) – 由position返回view type id根据view item的类型&#x…

数据查询

command命令的方法&#xff1a;ExecuteNonQuery(受影响行数),ExecuteReader(返回的是Datatable),ExecuteScalar(第一行第列) SqlDataAdapter是和DataSet配和工作的&#xff0c;不能分开。 using(SqlConnection connnew SqlConnection(connectionString)) { conn.Open(); SqlCom…