Mysql学习笔记(1)

通配符

  • %:任意类型、任意长度字符
  • _:任意单个字符
  • escape:配合转义字符/使用,转移字符后面的通配符将丢掉通配符的作用:
select username from gg_user where username like '%xiao/_%' escape '/'

联结查询

mysql联结查询包括内联结(inner join)和外联结(left join和right join),没有full join:


sql联结查询.png

inner join

内联结,查找出两个表都有的满足联结关系的数据行:

SELECT user.id,user.name,question.title
FROM
    user inner JOIN question 
on
    user.Id = question.user_id

如上,找出user和question表中满足条件的所有数据行

left join

左外联结,查找出两个表都有的满足联结关系的数据行,以及左表有、右表没有的数据行:

SELECT user.id,user.name,question.title
FROM
    user left JOIN question 
on
    user.Id = question.user_id

如上,找出user和question表中满足条件的所有数据行,但也可以找到不满足这个联结条件的user表中的数据行

right join

与left join相反,可以找到右表有但左表没有的数据行

SELECT user.id,user.name,question.title
FROM
    user right JOIN question 
on
    user.Id = question.user_id

如上,找出user和question表中满足条件的所有数据行,但也可以找到不满足这个联结条件的question表中的数据行

Mysql为什么不建议使用join(摘自网络)

不建议直接在数据库层面使用表联结,建议在数据库层面仅使用单表查询,在service层再通过dao使用多表关联,将多表的查询在service层进行分解,原因如下:
用分解关联查询的方式重构查询有如下的优势:

  • 让缓存的效率更高。许多应用程序可以方便地缓存单表查询对应的结果对象。如果关联中的某个表发生了变化,那么就无法使用查询缓存了,而拆分后,如果某个表很少改变,那么基于该表的查询就可以重复利用查询缓存结果了。

  • 将查询分解后,执行单个查询可以减少锁的竞争。

  • 在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展。

  • 查询本身效率也可能会有所提升。查询id集的时候,使用IN()代替关联查询,可以让MySQL按照ID顺序进行查询,这可能比随机的关联要更高效。

  • 可以减少冗余记录的查询。在应用层做关联查询,意味着对于某条记录应用只需要查询一次,而在数据库中做关联查询,则可能需要重复地访问一部分数据。从这点看,这样的重构还可能会减少网络和内存的消艳。

  • 更进一步,这样做相当于在应用中实现了哈希关联,而不是使用MySQL的嵌套循环关联。某些场景哈希关联的效率要高很多。

  • 分布式的分库分表,这种时候是不建议跨库join的。目前mysql的分布式中间件,跨库join表现不良

MyISAM 和 InnoDB 对比

数据库引擎都是表级别的

MyISAM引擎

  • 该引擎是用B+树建立索引,MYI文件存储索引,MYD文件存储具体数据,通过对索引字段构建B+树,将叶子结点映射到数据的物理地址上,进行高校查询
  • MyISAM是非聚集索引,叶子结点存储的不是实际数据,是数据的地址

InnoDB引擎

  • 该引擎没有MYI文件,索引和数据都保存在同一个文件
  • 该引擎通过主键构成的索引是聚集索引,叶子结点存储的是对应整行的实际数据;非主键的索引为辅助索引,叶子结点保存的是该行的主键

为何建议InnoDB主键用自增主键?

  • 插入层面:在新增数据时,如果主键不是自增主键,而是随机主键,重新构建索引树将导致插入数据不连续,造成磁盘存储数据的频繁移动;如果是自增主键,能够保证新插入的数据都在叶子结点的链表尾部,不会引起之前数据的物理地址频繁变动,加入数据的顺序和B+数叶子节点分裂顺序一致
  • 有时候不选择自增主键:保证分布式分库分表情况下主键不重复;保证数据安全性
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容