MySQL面真题和答案
Mysql 的存储引擎,myisam和innodb的区别。
答:
1.MyISAM 是非事务的存储引擎,适宜用于一再查询的应用。表锁,不会出现死锁,适宜小数据,小并发。
2.innodb是支持事务的存储引擎,合于插入和更新操作比拟多的应用,设计合理的话是行锁〔最大区别就在锁的级别上〕,适宜大数据,大并发。
数据表类型有哪些
答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。
MyISAM:成熟、稳定、易于治理,快速读取。一些功能不支持〔事务等〕,表级锁。
InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。
MySQL数据库作公布系统的存储,一天五万条以上的增量,估计运维三年,怎么优化?
a. 设计良好的数据库结构,同意局部数据冗余,尽量预防join查询,提高效率。
b. 选择适宜的表字段数据类型和存储引擎,适当的添加索引。
c. mysql库主从读写别离。
d. 规律分表,减少单表中的数据量提高查询速度。
e。添加缓存机制,比方memcached,apc等。
f. 不经常改动的页面,生成静态页面。
g. 书写高效率的SQL。比方 SELECT x FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.
对于大流量的网站,您采纳什么样的方法来解决各页面访问量统计问题?
答:a. 确认效劳器是否能支撑当前访问量。
b. 优化数据库访问。
c. 禁止外部访问链接〔盗链〕, 比方图片盗链。
d. 操作文件下载。
e. 使用不同主机分流。
f. 使用扫瞄统计软件,了解访问量,有针对性的进行优化。
汇编需要是一种如何进行SQL优化?
答:
〔1〕选择正确的存储引擎
specify词源以 MySQL为例,包含有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。
MyISAM 适宜于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直
到读操作完成。其它,MyISAM 对于 SELECT COUNT(x) 这类的计算是超快无比的。
InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。但是它支持“行锁〞 ,于是在写操作比拟多的时候,会更优秀。并且,他还支持更多的高级应用,比方:事务。
〔2〕优化字段的数据类型
记住一个原则,越小的列会越快。如果一个表只会有几列罢了〔比方说字典表,配置表〕,那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多。当然,你也需要留够足够的扩展空间。
〔3〕为搜索字段添加索引
索引并不肯定就是给主键或是唯—的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么最好是为其建立索引,除非你要搜索的字段是大的文本字段,那应该建立全文索引。
(4)预防使用Select x从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库效劳器和WEB效劳器是两台独立的效劳器的话,这还会增加网络传输的负载。即使你要查询数据表的全部字段,也尽量不要用x通配符,善用内置提供的字段排解定义也许能给带来更多的便利。
(5)使用 ENUM 而不是 VARCHAR
ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。例如,性别、民族、部门和状态之类的这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。
(6)尽可能的使用 NOT NULL
除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。 NULL其实需要额外的空间,并且,在你进行比拟的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依旧会有些情况下,你需要使用NULL值。
(7)固定长度的表会更快
如果表中的全部字段都是“固定长度〞的,整个表会被认为是 “static〞 或 “fixed-length〞。 例如,表中没有如下类型的字段: VARCHAR,TEXT,BLOB。只要你包含了其中一个这些字段,那么这个表就不是“固定长度静态表〞了,这样,MySQL 引擎会用另一种方法来处理。
固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很简单计算下一个数据的偏移量的,所以读取的自然也会很快。而如果字段不是定长的,那么,每一次要下一条的话,需要程序到主键。
并且,固定长度的表也更简单被缓存和重建。不过,唯—的副作用是,固定长度的字段会浪费一些空间,因为定长的字段无论你用不用,他都是要分配那么多的空间。
如何设计一个高并发的系统
① 数据库的优化,包含合理的事务隔离级别、SQL语句优化、索引的优化
② 使用缓存,尽量减少数据库 IO
③ 分布式数据库、分布式缓存
④ 效劳器的负载均衡
锁的优化策略
① 读写别离
② 分段加锁
③ 减少锁持有的时间
mysql怎么读英语④ 多个线程尽量以相同的顺序去猎取资源
等等,这些都不是绝对原则,都要依据情况,比方不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。这局部跟面试官谈了很久
索引的底层完成原理和优化
B+树,经过优化的B+树
mysql显示当前版本的命令是什么主要是在全部的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大局部表使用默认自增的主键作为主索引。
什么情况下设置了索引但无法使用
① 以“%〞开头的LIKE语句,模糊匹配
② OR语句前后没有同时使用索引
③ 数据类型出现隐式转化〔如varchar不加单引号的话可能会自动转换为int型〕
SQL语句的优化
order by要怎么处理
alter尽量将屡次合并为一次
insert和delete也需要合并
等等
实践中如何优化MySQL
我当时是按以下四条依次答复的,他们四条从效果上第—条影响最大,后面越来越小。
① SQL语句及索引的优化
② 数据库表结构的优化
php空间免费模式③ 系统配置的优化
④ 硬件的优化
sql注入的主要特点
变种极多,攻击简单,危害极大
sql注入的主要危害
未经授权操作数据库的数据
恶意纂改网页
私自添加系统账号或者是数据库使用者账号
网页挂木马
优化数据库的方法
matlab随机生成一个数1. 选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如’省份’、’性别’最好适用ENUM
2. 使用连接(JOIN)来替代子查询
3. 适用联合(UNION)来替代手动创立的临时表
4. 事务处理
5. 锁定表、优化事务处理
6. 适用外键,优化锁定表
7. 建立索引
8. 优化查询语句
简单描述mysql中,索引,主键,唯—索引,联合索引的区别,对数据库的性能有什么影响〔从读写两方面〕
索引是一种特别的文件(InnoDB数据表上的索引是表空间的一个组成局部),它们包含着对数据表里全部记录的引用指针。
一般索引(由关键字KEY或INDEX定义的索引)的唯—任务是加快对数据的访问速度。
一般索引同意被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创立索引的时候就应该用关键字UNIQUE把它定义为一个唯—索引。也就是说,唯—索引可以保证数据记录的唯—性。
主键,是一种特别的唯—索引,在一张表中只能定义一个主键索引,主键用于唯—标识一条记录,使用关键字 PRIMARY KEY 来创立。
索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
数据库中的事务是什么
事务〔transaction〕是作为一个单元的一组有序的数据库操作。如果组中的全部操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果全部操作完成,事务则提交,其修改将作用于全部其他数据库进程。如果一个操作失败,则事务将回滚,该事务全部操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论