摸鱼看完的书,笔记扔在这里记录一下:)
mySQL中IN比OR的速度快,原因?- 对于
IN来说,会将匹配的行的值r与二叉搜索树(r1,r2,r3)进行查找,时间复杂度为 O ( l o g n ) O(logn) O(logn) - 对于
OR来说,会将匹配的行的值r与全部的值进行依次匹配,时间复杂度为 O ( n ) O(n) O(n)
- 对于
IN的最大优点?
IN能够包含其他SELECT语句MYSQL中NOT支持对什么语句进行取反?
NOT支持对IN、BETWEEN、EXISTS取反MYSQL中LIKE是什么?
LIKE是谓词,不是操作符NULL能被%通配符匹配吗?
NULL不能被%通配符匹配- 使用通配符
%、_的技巧- 花费时间更长,能不使用就不适用
- 尽量不要置于开头,匹配时间最长
- 仔细注意位置
- 正则表达式匹配的谓词?
REGEXP LIKE和REGEXP的区别?LIKE匹配整个列值REGEXP匹配时,当匹配文本在列值中出现,就会返回- 当
REGEXP在匹配的时候,开头和结尾分别加上^和$就可以实现和LIKE一样的作用
MYSQL中正则表达式匹配区分大小写的关键字?
BINARYSOUNDEX函数的作用?
采用算法,将串变成其语音表示的字母数字算法,实现能够对串进行发音比较。COUNT(*)会对NULL进行匹配吗?
COUNT(*)会对NULL进行匹配,但是COUNT(column)就不会对该列为NULL的行进行计数DISTINCT能用于COUNT(*)吗?
不能,如果使用的话,语句为COUNT(DISTINCT),产生错误,故不能GROUP BY对于NULL值的处理?
当分组列中存在NULL值的时候,把所有的NULL值放在一起,作为一个单独的分组GROUP BY和ORDER BY的语句顺序?
GROUP BY一定要放在WHERE语句后,ORDER BY前WITH ROLLUP的作用
当使用GROUP BY的时候,在GROUP BY语句后加上WITH ROLLUP,会在每一个分组下面加上一行,表示该分组的汇总数据SLECT语句顺序?SELECTFROMWHEREGROUP BYHAVINGORDER BYLIMIT
- 给表名起别名的理由?
- 缩短
SQL语句 - 允许在单条
SELECT语句中多次使用相同的表
- 缩短
- 自联结通常比子查询要更加迅速?
MYSQL中的自然联结需要自己实现,内部没有预实现*=和=*在MYSQL中不支持,在其他DBMS中用于表示左外部联结和右外部联结- 使用
UNION的规则UNION必须由两条及以上的SELECT语句组成,SELECT语句中用关键字UNION分隔UNION中每个查询中必须包含相同的列、表达式或聚集函数- 列数据类型必须兼容
UNION会自动去除重复的行吗?
UNION会自动去除重复的行,如果不想要去除重复的行,可以使用UNION ALL- 对
UNION的输出进行排序?
此时的ORDER BY必须放在最后一条SELECT语句之后,并作用在整个UNION并集中 - 所有引擎都支持全文本搜索吗?
并不是,常见的引擎有MyISAM和InnoDB,其中MyISAM支持全文本搜索,InnoDB不支持全文本搜索(MYSQL 5.6后两者均支持) - 使用全文本搜索的时候,
MYSQL不会分别查看每个行,不需要分别分析和处理每个词。而是创建列中各词的索引,搜索可以针对这些词进行。 - 全文本搜索必须索引搜索的列
- 使用
FULLTEXT(column, column, ...)来标明全文本搜索的列 - 导入数据时,应当先不开始全文本搜索,待所有数据导入到新表中,再开启全文本搜索,时间更快?
- 全文本搜索会对结果进行排序,等级高的行先返回
- 布尔文本搜索一定要在
FULLTEXT开启的情况下才能进行吗?
不是,即使没有定义FULLTEXT索引,也可以使用,只是非常缓慢 - 布尔方式搜索时,会进行排序吗?
不会,在布尔方式中,不按等级值降序排序返回的行 - 全文本搜索的重要说明?
- 索引全文本数据时,短词(具有3个或3个以下字符的词)被忽略并从索引中删除
MYSQL中有内建的非用词(stopword)列表,其中的词在创建索引时会被忽略MYSQL中有50%规则:如果一个词出现在50%的行中,会作为非用词- 表中的行少于3行,全文本搜索不返回结果
- 全文本搜索忽略词中的单引号
INSERT语句一般不会产生输出- 简单的
INSERT语句中各个列必须以他们在表定义中出现的次序进行填充 - 当使用
INSERT语句的时候,总是使用包含列的列表的INSERT语句 INSERT语句的列名可以被省略,省略的列应当满足的条件:- 该列允许被定义为
NULL - 表定义中存在默认值
- 该列允许被定义为
- 插入多个行数据时,尽量在一条
INSERT语句中解决,因为用单条INSERT语句处理插入比使用多条INSERT语句快 UPDATE更新多行,如果其中一行发生错误,整个UPDATE操作被取消;如果想要发生错误也可以继续,那么要使用UPDATE IGNORE tableName- 为什么
TRUNCATE TABLE比DELETE FROM TABLE更快?
因为TRUNCATE相当于是删掉原来的表,并重新建立一个新的表 - 如何仅在创建的表明不存在时创建新表?
CREATE TABLE tableName IF NOT EXISTS - 主键只能使用
NOT NULL的列 AUTO_INCREMENT允许存在一个表的多列上吗?
不允许,每个表只允许一个AUTO_INCREMENT,而且它必须被索引MYSQL在使用默认值DEFAULT的时候,允许函数定义吗?
MYSQL不允许使用函数作为默认值,只允许使用常量MYSQL中常见的引擎类型?InnoDB:事务处理引擎,5.6前不支持全文本搜索MEMORY:功能上等同于MyISAM,但是数据存储在内存中,速度很快,适用于临时表MyISAM:性能很高,支持全文本搜索,但不支持事务处理
- 外键不能跨引擎使用
MYSQL 5之后提供了对视图的支持- 多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会造成性能下降很厉害
- 视图不能有索引,也不能有关联的触发器或者默认值
CREATE OR REPLACE VIEW常用于更新视图- 如果从视图检索数据时使用了一条
WHERE字句,那么在视图中的WHERE字句和传递给视图的WHERE字句会自动合并 - 更新一个视图将更新其基表
- 应将视图用于检索而不是更新
- 存储过程:多条
MYSQL语句的集合 - 使用存储性能的三个主要好处:
- 简单
- 安全
- 高性能
- 仅当存在时删除过程:
DROP PROCEDURE IF EXISTS - 所有的
MYSQL变量必须以@开头 MYSQL游标只能用于存储过程(和函数)


被折叠的 条评论
为什么被折叠?



