
适用结构相同的表联结成一张大表
内连接:返回两个表共同的行
左连接:以表 1 为基础,匹配表 2 的相同行
右连接:以表 2 为基础,匹配表 1 的相同行
全连接:返回全部数据,可以理解为左连接和右连接的结合
mysql 没有全连接
常用于组内排序,具体写法如下
窗口函数可以用 rank 相关函数或者聚合函数
当前日期+时间(date + time)函数:now()
当前时间戳函数:current_timestamp()
日期或时间转换为字符串 函数:date_format(date,format), time_format(time,format)
lower(str):将字符串参数值转换为全小写字母后返回
upper(str):将字符串参数值转换为全大写字母后返回
concat(str1, str2,...):将多个字符串参数首尾相连后返回
concat_ws(separator,str1,str2,...):将多个字符串参数以给定的分隔符 separator 首尾相连后返回
substr(str,pos):截取从 pos 位置开始到最后的所有 str 字符串
substr(str, pos, len):截取 str 字符串,从 pos 位置开始的 len 个字符
length(str):返回字符串的存储长度
char_length(str):返回字符串中的字符个数
format(X,D,locale):以格式 ‘#,###,###.##’ 格式化数字 X,D 指定小数位数,locale 指定国家语言(默认的 locale 为 en_US)
left(str, len):返回最左边的len长度的子串
right(str, len):返回最右边的len长度的子串
ltrim(str),rtrim(str):去掉字符串的左边或右边的空格
repeat(str, count):将字符串 str 重复 count 次后返回
reverse(str):将字符串 str 反转后返回
通俗易懂的学会:SQL窗口函数
mysql format时间格式化说明
MySQL常用字符串函数
当面对巨大的数据表的时候,至少有一件事情是确定的,表太大了以至于每次查询的时候我们没法做全表扫描。而这个时候也没法使用索引,或者说索引意义不大,更不用说索引的维护代价和空间占用非常高。如果是依赖索引,会导致大量的碎片和低聚集度的数据,这会导致查询的时候有上千次的随机 I/O 访问而导致宕机。这种情况下一般只会使用1-2个索引,而不会更多。这种情况下,有两个可行的选项:查询必须从数据表的指定的部分顺序查找或者是期望的部分数据及其索引与服务器的内存匹配。
需要再次重申:在存储空间过大时,除非索引覆盖了整个查询,否则二叉树索引就无法发挥作用。服务端需要查找数据表的一整行数据,并且会在一个大空间跨度里执行随机 I/O *** 作,这会导致查询响应时间无法接受。而维护索引(磁盘空间,I/O *** 作)的代价同样很高。
而这是分区能够解决的问题。这其中的关键就是分区是索引的一个初级形式,它的负荷低并且能够让我们从临近的数据中获取结果。这种情形下,我们可以依次扫描相邻的数据或者是将临近的数据加载到内存进行检索。分区之所以负荷低是因为它并没有指针指向对应的数据行,也不需要被更新。分区并不精确地将数据按行划分,也没有涉及到所谓的数据结构。实际上,分区相当于对数据进行了分类。
对于大数据表,有两种策略进行分区:
两种分区策略是基于两个关键假设:在查询的时候可以通过过滤分区缩小查找范围,且分区自身的代价不高。然而,这两个假设未必总是有效,下面是可能遇到的问题:
如上所述,分区并不是完美解决方案,目前版本的 MySQL还有一些其他的约束:
当然,随着 MySQL 版本的更新迭代,对分区的支持也越来越好,并且很多分区的问题都得到了修复。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)