六安沧州西安三亚宝鸡菏泽
投稿投诉
菏泽德阳
山西湖州
宝鸡上海
茂名内江
三亚信阳
长春北海
西安安徽
黄石烟台
沧州湛江
肇庆鹤壁
六安韶关
成都钦州

面试常考知识点总结

  数据库的三范式
  第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
  第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
  第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
  SQL执行顺序
  关键字:select、from、join、on、where、groupby、having、orderby、distinct执行顺序
  fromamp;gt;joinamp;gt;onamp;gt;whereamp;gt;groupbyamp;gt;havingamp;gt;selectamp;gt;distinctamp;gt;orderby
  UNIONALL、EXCEPTALL和INTERSECTALL
  UNIONALL:组合多个结果表,并消去表中重复行,和ALL一起使用时,不消除重复行。
  EXCEPTALL:在table1中但不在table2中的行并消除重复行,和ALL一起使用时,不消除重复行。
  INTERSECTALL:包括table1和table2中都有的行并消除重复行,和ALL一起使用时,不消除重复行。
  内连接、外连接、笛卡儿积(交叉连接)
  内连接:结果仅包含符合连接条件的两表中的行
  外连接:结果包含符合条件的行,同时包含不符合条件的行(分为左外连接、右外连接和全外连接)
  左外连接:左表全部行右表匹配的行,如果左表中某行在右表中没有匹配的行,则显示NULL。
  右外连接:右表全部行左表匹配的行。
  全外连接:全外连接:不管匹配不匹配,全部显示出来。
  交叉连接:返回左表中所有行与右表中所有行的组合,也称笛卡尔积。
  VARCHAE和CHAR的区别
  CHAR:指定长度,如果一个数据实际长度比设定长度短,那么它将按照设定(最长)长度储存,不足部分,填补空格。适用于固定长度的字段,如性别、手机号等。
  VARCHAE:指定最大长度,但该长度可变,即如果数据的实际长度比设定长度短,那么它将按照实际长度储存,而不占用剩余的空间。适用于非固定长度的字段,如姓名、城市名等。
  DROP,DELETE与TRUNCATE的区别
  DROP直接删掉表。
  TRUNCATE删除表中数据,再插入时自增长id又从1开始。
  DELETE删除表中数据,可以加WHERE字句。
  数据库事务(ACID)
  原子性(Atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作。
  一致性(Consistency)数据库总是从一个一致性的状态转换到另一个一致性的状态。
  隔离性(Isolation)一个事务所做的修改在最终提交以前,对其他事务是不可见的。
  持久性(Durability)一旦事务提交,则其所做的修改不会永久保存到数据库。
  数据库的乐观锁和悲观锁
  悲观锁:对数据被外界修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。(悲观锁的实现,往往依靠数据库提供的锁机制)
  乐观锁:大多是基于数据版本(Version)记录机制实现。
  即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个version字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据
  脏读、虚读和不可重复读
  脏读:一个事务读取到了另外一个事务没有提交的数据;(修改的数据还未提交就被另一个事务使用这个数据)
  不可重复读:在同一事务中,两次读取同一数据,得到内容不同;(两次读取同一数据之间,另一个事务对数据进行了修改)
  虚度:同一事务中,用同样的操作读取两次,得到的记录数不相同;(两次相同的操作之间,另一个事务对数据进行了新增或删除)
  MySQL中的四种事务隔离级别
  序列化(Serializable):可避免脏读、不可重复读、幻读的发生。
  可重复读(Repeatableread):可避免脏读、不可重复读的发生。
  读已提交(Readcommitted):可避免脏读的发生。
  读未提交(Readuncommitted):最低级别,任何情况都无法保证。
  MVCC(多版本并发控制)
  MVCC最大的好处:读不加锁,读写不冲突。
  1。多版本并发控制(MVCC)是一种用来解决读写冲突的无锁并发控制,也就是为事务分配单向增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照。这样在读操作不用阻塞写操作,写操作不用阻塞读操作的同时,避免了脏读和不可重复读
  2。当MVCC数据库更新一条数据时,不会直接重写原始的数据,而是修改新创建的数据副本。因此会有多个版本的数据被保存下来。每个事务看到的数据版本依赖于隔离级别的实现。MVCC里最通用的隔离级别的实现就是快照隔离。在快照隔离的情况下,事务只会获取到数据的在事务开始前的状态。
  MYSQL主从复制
  概念解释MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制。MySQLReplication就是从服务器拉取主服务器上的二进制日志文件,然后再将日志文件解析成相应的SQL语句在从服务器上重新执行一遍主服务器的操作,通过这种方式来保证数据的一致性。主从复制原理1。master(主)在执行sql之后,记录二进制log文件(binlog)。2。slave(从)连接master,并从master获取binlog,存于本地relaylog中,然后从上次记住的位置起执行SQL语句,一旦遇到错误则停止同步。简记:MySQL的主从复制,实际上就是Master记录自己的执行日志binlog,然后发送给Slave,Slave解析日志并执行,来实现数据复制。主服务器流程分析首先binlog日志文件加锁,然后读取更新的操作,读取完毕以后将锁释放掉,最后将读取的记录发送给从服务器。从服务器流程分析在一次主从复制过程中需要用到三个线程:Binlogdump线程、SlaveIO线程和SlaveSQL线程,其中Binlogdump线程在主服务器上面,剩下的两个线程是在从服务器上面工作的。这两个线程在从服务器上面的工作流程如下图所示:如何提高Mysql主从复制的效率?1。master端master端有2个参数可以控制。BinlogDoDB:设定哪些数据库需要记录Binlog。BinlogIgnoreDB:设定哪些数据库不要记录Binlog。2。slave端slave端有6个参数可以控制。ReplicateDoDB:设定须要复制的数据库,多个DB用逗号分隔。ReplicateIgnoreDB:设定可以忽略的数据库。ReplicateDoTable:设定须要复制的Table。ReplicateIgnoreTable:设定可以忽略的Table。ReplicateWildDoTable:功能同ReplicateDoTable,但可以带通配符来进行设置。ReplicateWildIgnoreTable:功能同ReplicateIgnoreTable,可带通配符设置。
  数据库的分库分表
  分表对于访问极为频繁且数据量巨大的单表来说,我们首先要做的就是减少单表的记录条数,以便减少数据查询所需要的时间,提高数据库的吞吐,这就是所谓的分表!将原有的单表分为256个表算法:userid256拆分后表的数量一般为2的n次方,就是上面拆分成256张表的由来!分库分表能够解决单表数据量过大带来的查询效率下降的问题,但是,却无法给数据库的并发处理能力带来质的提升。面对高并发的读写访问,对数据库进行拆分,从而提高数据库写入能力,这就是所谓的分库!将原有的单库分为256个库算法:userid256分库分表有时数据库可能既面临着高并发访问的压力,又需要面对海量数据的存储问题,这时需要对数据库既采用分表策略,又采用分库策略,以便同时扩展系统的并发处理能力,以及提升单表的查询性能,这就是所谓的分库分表。一种分库分表的路由策略如下:1。中间变量userid(分库数量每个库的表数量)2。库取整数(中间变量每个库的表数量)3。表中间变量每个库的表数量举例:假设将原来的单库单表order拆分成256个库,每个库包含1024个表,那么按照前面所提到的路由策略,对于userid262145的访问,路由的计算过程如下:1。中间变量262145(2561024)12。库取整(11024)03。表110241这就意味着,对于userid262145的订单记录的查询和修改,将被路由到第0个库的第1个order1表中执行!!!
  数据库SQL优化
  1。对查询进行优化,要尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。2。应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。如:selectidfromtwherenumisnull
  最好不要给数据库留NULL,尽可能的使用NOTNULL填充数据库。备注、描述、评论之类的可以设置为NULL,其他的,最好不要使用NULL。
  不要以为NULL不需要空间,比如:char(100)型,在字段建立时,空间就固定了,不管是否插入值(NULL也包含在内),都是占用100个字符的空间的,如果是varchar这样的变长字段,null不占用空间。
  可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:selectidfromtwherenum03。应尽量避免在where子句中使用!或amp;lt;amp;gt;操作符,否则将引擎放弃使用索引而进行全表扫描。4。应尽量避免在where子句中使用or来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描。如:selectidfromtwherenum10orNameadmin可以这样查询:selectidfromtwherenum10unionallselectidfromtwhereNameadmin5。in和notin也要慎用,否则会导致全表扫描。如:selectidfromtwherenumin(1,2,3)对于连续的数值,能用between就不要用in了:selectidfromtwherenumbetween1and3很多时候用exists代替in是一个好的选择:selectnumfromawherenumin(selectnumfromb)用下面的语句替换:selectnumfromawhereexists(select1frombwherenuma。num)6。下面的查询也将导致全表扫描selectidfromtwherenamelike‘abc’若要提高效率,可以考虑全文检索。7。如果在where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:selectidfromtwherenumnum可以改为强制查询使用索引:selectidfromtwith(index(索引名))wherenumnum应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:selectidfromtwherenum2100应改为:selectidfromtwherenum10029。应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:selectidfromtwheresubstring(name,1,3)’abc’name以abc开头的idselectidfromtwheredatediff(day,createdate,’20051130)0‘20051130’生成的id应改为:selectidfromtwherenamelikeabcselectidfromtwherecreatedateamp;gt;20051130andcreatedateamp;lt;200512110。不要在where子句中的左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。11。在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。12。不要写一些没有意义的查询,如需要生成一个空表结构:selectcol1,col2intotfromtwhere10这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:createtablet()13。Update语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。14。对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。15。selectcount()fromtable;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。16。索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update的效率,因为insert或update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。17。应尽可能的避免更新clustered索引数据列,因为clustered索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新clustered索引数据列,那么需要考虑是否应将该索引建为clustered索引。18。尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。19。尽可能的使用varcharnvarchar代替charnchar,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。20。任何地方都不要使用selectfromt,用具体的字段列表代替,不要返回用不到的任何字段。21。尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。22。避免频繁创建和删除临时表,以减少系统表资源的消耗。临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。23。在新建临时表时,如果一次性插入数据量很大,那么可以使用selectinto代替createtable,避免造成大量log,以提高速度;如果数据量不大,为了缓和系统表的资源,应先createtable,然后insert。24。如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncatetable,然后droptable,这样可以避免系统表的较长时间锁定。25。尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。26。使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。27。与临时表一样,游标并不是不可使用。对小型数据集使用FASTFORWARD游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括合计的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。28。在所有的存储过程和触发器的开始处设置SETNOCOUNTON,在结束时设置SETNOCOUNTOFF。无需在执行存储过程和触发器的每个语句后向客户端发送DONEINPROC消息。29。尽量避免大事务操作,提高系统并发能力。
  30。尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
  聚集索引和非聚集索引
  聚集索引聚集索引就是存放的物理顺序和列中的顺序一样。一般设置主键索引就为聚集索引。一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐。如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是平衡树结构,换句话说,就是整个表就变成了一个索引,也就是所谓的聚集索引。这就是为什么一个表只能有一个主键,一个表只能有一个聚集索引,因为主键的作用就是把表的数据格式转换成索引(平衡树)的格式放置。上图就是带有主键的表(聚集索引)的结构图。其中树的所有结点(底部除外)的数据都是由主键字段中的数据构成,也就是通常我们指定主键的id字段。最下面部分是真正表中的数据。假如我们执行一个SQL语句:selectfromtablewhereid1256首先根据索引定位到1256这个值所在的叶结点,然后再通过叶结点取到id等于1256的数据行。这里不讲解平衡树的运行细节,但是从上图能看出,树一共有三层,从根节点至叶节点只需要经过三次查找就能得到结果。如下图然而,事物都是有两面的,索引能让数据库查询数据的速度上升,而使写入数据的速度下降,原因很简单的,因为平衡树这个结构必须一直维持在一个正确的状态,增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构,因此,在每次数据改变时,DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。非聚集索引讲完聚集索引,接下来聊一下非聚集索引,也就是我们平时经常提起和使用的常规索引。非聚集索引和聚集索引一样,同样是采用平衡树作为索引的数据结构。索引树结构中各节点的值来自于表中的索引字段,假如给user表的name字段加上索引,那么索引就是由name字段中的值构成,在数据改变时,DBMS需要一直维护索引结构的正确性。如果给表中多个字段加上索引,那么就会出现多个独立的索引结构,每个索引(非聚集索引)互相之间不存在关联。如下图每次给字段建一个新索引,字段中的数据就会被复制一份出来,用于生成索引。因此,给表添加索引,会增加表的体积,占用磁盘存储空间。非聚集索引和聚集索引的区别在于:通过聚集索引可以一次查到需要查找的数据,而通过非聚集索引第一次只能查到记录对应的主键值,再使用主键的值通过聚集索引查找到需要的数据。聚集索引一张表只能有一个,而非聚集索引一张表可以有多个。
  索引是什么?有什么作用以及优缺点?
  索引是什么?
  数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B树。
  索引原理
  索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数。相似的例子还有:查字典,查火车车次,飞机航班等。
  磁盘IO与预读
  考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次IO,这个理论对于索引的数据结构设计非常有帮助。
  索引的两大类型Hash索引和B树索引
  Hash类型的索引:查询单条快,范围查询慢。
  B树类型的索引:b树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)。
  不同的存储引擎支持的索引类型也不一样
  InnoDB支持事务,支持行级别锁定,支持Btree、Fulltext等索引,不支持Hash索引。
  MyISAM不支持事务,支持表级别锁定,支持Btree、Fulltext等索引,不支持Hash索引。
  Memory不支持事务,支持表级别锁定,支持Btree、Hash等索引,不支持Fulltext索引。
  Hash索引的限制
  1。由于索引仅包含hashcode和记录指针,所以,MySQL不能通过使用索引避免读取记录。但是访问内存中的记录是非常迅速的,不会对性造成太大的影响。
  2。不能使用hash索引排序。
  3。Hash索引不支持键的部分匹配,因为是通过整个索引值来计算hash值的。
  4。Hash索引只支持等值比较,例如使用,IN()和amp;lt;amp;gt;。对于WHEREpriceamp;gt;100并不能加速查询。lt;!gt;
  索引数据结构为什么采用B树
  为了尽量减少IO操作,磁盘读取每次都会预读,大小通常为页的整数倍。即使只需要读取一个字节,磁盘也会读取一页的数据(通常为4K)放入内存,内存与磁盘以页为单位交换数据。因为局部性原理认为,通常一个数据被用到,其附近的数据也会立马被用到。
  B树:如果一次检索需要访问4个节点,数据库系统设计者利用磁盘预读原理,把节点的大小设计为一个页,那读取一个节点只需要一次IO操作,完成这次检索操作,最多需要3次IO(根节点常驻内存)。数据记录越小,每个节点存放的数据就越多,树的高度也就越小,IO操作就少了,检索效率也就上去了。
  B树:非叶子节点只存key,大大滴减少了非叶子节点的大小,那么每个节点就可以存放更多的记录,树更矮了,IO操作更少了。所以BTree拥有更好的性能。
  由于B树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。
  B树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B树好。
  索引的优缺点
  优点:
  1。通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
  2。可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
  3。可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
  4。在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
  5。通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
  缺点:
  1。创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
  2。索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
  3。当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
  索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。
  哪些字段适合建索引
  1。在经常需要搜索的列上,可以加快搜索的速度;
  2。在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
  3。在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
  4。在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
  5。在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
  6。在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
  哪些字段不适合建索引
  1。对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
  2。对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
  3。对于那些定义为text,image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
  4。当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。
  数据库引擎MyISAM和InnoDB
  MyISAMInnoDB事务支持不支持支持锁的粒度表锁行锁存储容量没有上限64TB哈希索引不支持支持全文索引支持以前不支持,现在支持外键不支持支持
  InnoDB是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发
  InnoDB是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。
  MyISAM表的数据文件和索引文件是自动分开的;InnoDB的数据和索引是存储在同一个表空间里面,但可以有多个文件组成。
  为什么MyISAM会比InnoDB的查询速度快
  1。InnoDB要缓存数据块,而MyISAM只缓存索引块
  2。InnoDB寻址要映射到块,再到行,MyISAM记录的直接是文件的OFFSET,定位比InnoDB要快
  3。InnoDB还需要维护MVCC一致
  慢查询日志
  慢查询日志概念MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过longquerytime值的SQL,则会被记录到慢查询日志中。longquerytime的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。慢查询日志相关参数slowquerylog:是否开启慢查询日志,1表示开启,0表示关闭。logslowqueries:旧版(5。6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件hostnameslow。logslowquerylogfile:新版(5。6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件hostnameslow。loglongquerytime:慢查询阈值,当查询时间多于设定的阈值时,记录日志。logqueriesnotusingindexes:未使用索引的查询也被记录到慢查询日志中(可选项)。logoutput:日志存储方式。logoutputFILE表示将日志存入文件,默认值是FILE。慢查询日志配置默认情况下slowquerylog的值为OFF,表示慢查询日志是禁用的,可以通过设置slowquerylog的值来开启。mysqlamp;gt;showvariableslikeslowquerylog;VariablenameValueslowquerylogOFFslowquerylogfileusrlocalmysqldatalocalhostslow。log2rowsinset(0。00sec)mysqlamp;gt;setglobalslowquerylog1;QueryOK,0rowsaffected(0。00sec)mysqlamp;gt;showvariableslikeslowquerylog;VariablenameValueslowquerylogONslowquerylogfileusrlocalmysqldatalocalhostslow。log2rowsinset(0。00sec)使用setglobalslowquerylog1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my。cnf(其它系统变量也是如此)修改my。cnf文件,增加或修改参数slowquerylog和slowquerylogfile后,然后重启MySQL服务器。slowquerylog1slowquerylogfileusrlocalmysqldatalocalhostslow。logmysqlamp;gt;showvariableslikeslowquery;VariablenameValueslowquerylogONslowquerylogfileusrlocalmysqldatalocalhostslow。log2rowsinset(0。00sec)mysqlamp;gt;慢查询的参数slowquerylogfile,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件hostnameslow。log日志分析工具mysqldumpslow在实际生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow得到返回记录集最多的10个SQL。mysqldumpslowsrt10databasemysqlmysql06slow。log得到访问次数最多的10个SQLmysqldumpslowsct10databasemysqlmysql06slow。log得到按照时间排序的前10条里面含有左连接的查询语句。mysqldumpslowstt10gleftjoindatabasemysqlmysql06slow。log另外建议在使用这些命令时结合和more使用,否则有可能出现刷屏的情况。mysqldumpslowsrt20mysqldatamysqlmysql06slow。logmore
  XSS、SQL和CSRF攻击
  XSS(CrossSiteScript,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式。
  防止方法:做数据校验、做标签转换,如:空格转化为。
  SQL注入攻击是注入攻击最常见的形式,当服务器使用请求参数构造SQL语句时,恶意的SQL被嵌入到SQL中交给数据库执行;
  防止方法:输入校验、sql不要动态拼接,用参数化的sql。
  CSRF攻击(CrossSiteRequestForgery,跨站请求伪造)是攻击者通过跨站请求,以合法的用户身份进行非法操作(如转账或发帖等)。
  CSRF的原理是利用浏览器的Cookie或服务器的Session,盗取用户身份;
  防止方法:使用post代替get,因为post不会被缓存;每次清除掉cookie。

修眉的方法现在的女孩子越来越重视自己的仪表容妆。只要外出,她们总会精心修饰一番,不仅是自己的穿着打扮,更重要的是面目容妆。人的整个面目可以通过五官给其他人传递出很多信息,俗话说,眼睛是心……诺言中的谎言在一个没有雨的雨季,你悄悄的走了,没有留下任何信息。而我只能默默的看着,看着那个空荡的路口,看着那个熟悉的背影。泪水打湿了眼眶,眼中不停的出现你的背影,似乎在冲着我微笑,似乎在……子嗣十三十二hr新陇和妻子仓惶逃出了乌龙沟。彷佛是被那狂野的沙尘暴给撵出来的一样。但当车子拐下那段缓坡时,沙尘已经抢先占领了西川。就像是一场全面地围攻。车子经过市场时,一个人影都没有了……香水里的爱情密码我不是一个细心的人,特别是在恋爱的时候。有些大师级的男人在谈恋爱的时候把女孩子的心理摸的清清楚楚,追起来事半功倍;而我是一个桐油灯盏,拨一下亮一下,有时候拨好几下都不亮,……温习那份情书那年有个兄弟看上了一妞,在人家身边晃了一阵之后,就想步子快一点,来点跨越式发展。主要的构思就是先组织一批文字过去,表个态。就是《五朵金花》里面唱的丢个石头试水深的意思。这……关于母亲生日的说说祝妈妈生日快乐的短句说说大全一、你是我生命中的春天,这三生三世你一直是我的春天。生日快乐!二、幸福感爆棚就是这么简单啊,祝老妈生日快乐,永远永远开心幸福。三、祈愿您的生日,用意想不到的甜蜜和幸……写给妈妈的赞美诗晚上睡觉前,我总要和儿子躺在床上亲昵地交谈一会儿,说说他幼儿园的新鲜事啦,回忆一下他学习的新知识啦,或者抒发抒发彼此对家人的热爱之情啦,然后我们互道晚安,甜蜜地进入梦乡。有一次……我背叛了我的父亲过两天就是中秋了,今年特别巧,中秋和国庆竟撞到了一起。当然还有个一直都很巧的事,我父亲的生日在农历八月十六。每年过完中秋,第二天就要给他发个生日的祝福。今年大可不必了,因为我也……如何缓解压力证明压力过大个征兆社会的飞速发展导致我们也要不停的进步,而在此时就会有各种各样的压力伴随着我们,而有的时候我们根本不知道压力的存在,接下来小编就告诉你压力过大的征兆,希望可以让大家早日发现,及早……判断男女之间感情深度的方法你知道几个网络配图如果男女之间并没有亲缘关系,这种情况下,女人和男人的关系是明朗化的,最多是男女朋友的关系。男人和女人双方都赌气,相互不理。这不仅说明,男女关系较为深入了,并且还说……职场女职员发型怎么弄简单利落盘发最好看简单时尚的一款气质美发造型设计,长盘发的搭配和侧刘海的气质造型,职业装的设计下,更加沉稳有个性呢!非常女强人的气派。这款清新靓丽的时尚露额盘发发型设计非常适合职场女生的打……可爱乖巧梨花头发型新颖装嫩好武器选择了棕色的染发,让你整体造型有一种异域风情的味道在里面,甜美可爱的脸庞使用淡淡的粉底,便可以让你展现出所要的气质,明亮的双眼,搭配一身淡紫色的服装,体现了你有着一颗梦幻小女生……
抖音视频播放量怎么轻松过万抖音播放量怎以往我们在分析抖音怎么上热门的时候大多是从视频内容制作,账号养号等角度进行切入。今天我们从抖音视频发布的时间和频率来分析。我们知道,抖音的推送率极高,但是视频的基数也相当……宿根蔗怎么样管理能提高产量甘蔗留宿根蔗需要注意什么,应该如何管理?宿根蔗与新植蔗管理上有哪些不同?宿根蔗主要的管理工作有哪些?以下中国三农网就作简单介绍,供网友们参考。1、甘蔗品种的选择:选择宿根……天竺葵值得入手的品种在天竺葵不同的品种里,值得入手的品种有帝王天竺葵、马蹄天竺葵、盾叶天竺、天使天竺葵、垂天竺葵、直立天竺葵、彩叶亚天竺葵、矮生天竺葵、花型天竺葵、以及星状天竺葵,这十大品种都有着……七月流行创业瘫不过能爬起来的都融到资了如果说往年七月的关键词是暑期档和葛优瘫,那今年的七月最潮词莫过于DiuDiu了。整个七月,滴滴amp;amp;Uber这对欢喜冤家,从被结婚传言的传言,历经数次辟谣、传谣……乌龟什么时候结束冬眠出眠好浅议宠物龟出尽管现在的天气刚刚进入早春,但已经有很多心急的龟友,按捺不住,开始操心乌龟出眠的问题了。类似于某某省乌龟什么时候出眠、现在乌龟可以出眠喂食了吗等问题不断出现。看起来乌龟冬眠的这……酱油发霉会不会有黄曲霉毒素酱油是我们做饭炒菜时离不开的一种调料,可以调味、调色、提鲜,不同的酱油用法也有所不同。酱油也是用大豆之类的粮食和食盐一起酿造出来的,而我们都知道粮食这类发霉的话会有黄曲霉毒素,……教育部公布年高考考试时间月日开始教育部昨天宣布,今年高考全国统考科目在6月7日和6月8日两天举行。其中6月7日上午9001130考语文,下午15001700考数学,8日上午考外语,下午考文科综合理科综合。……草鱼可以喂玉米吗吃玉米长得快吗草鱼可以吃的食物比较多,玉米也是它们的食物之一。不过,虽然草鱼对玉米也比较感兴趣,但若是只将玉米这一种食物作为饲料的话,可能会导致它们营养单一,无法长得特别快。所以在养殖的时候……教师资格证免费的景点有哪些操作方法01:hr北京故宫博物馆北京故宫博物馆对拥有教师资格证的老师是实行免费开放的,而且全年有效哦!02:hr四川峨眉山每年的教师节和暑假这段时间,持……西安必去的景点有哪些西安是陕西的省会,中国四大古都之一,是中华民族和中华文明重要发祥地,是中国最佳旅游目的地,有哪些景点是必须去的呢?操作方法01:hr陕西历史博物馆AAAA级景区,陕……错误码解决方案近期很多小伙伴在登录游戏平台的时候提示aclasstaghrefwiki10485U6ggn0I。htmlwegamea错误码3,但是自己的账号密码并没有输入错误的情况,造成这……最新谷歌邮箱注册入口亲测简单有效拥有一个aclasstaghrefwiki10409I4krgnw2。html邮箱a很重要,谷歌play,谷歌相关产品,均需通过谷歌邮箱登录,且跨境电商和外贸人员以及留学人员在……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网