随笔分类 - MySql
MySql相关
摘要:一、什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表。mysql5.1开始支持数据表分区了。 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区。当然也可根据其他的条件分区。二、为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率。分区的一些优点包括:与单个磁盘或文件系统分区相比,可以存储更多的数据。对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。通常和分区
阅读全文
摘要:1 问题描述一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣。当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析、语法解析、权限检查、查询优化、SQL执行等一系列的步骤,简短的篇幅是绝对无能为力的。因此,本文挑选了其中的部分内容,也是我一直都想写的一个内容,做重点介绍:给定一条SQL,如何提取其中的where条件?where条件中的每个子条件,在SQL执行的过程中有分别起着什么样的作用?通过本文的介绍,希望读者能够更好地理解查询条件对于SQL语句的影响;撰写出更为优质的SQL语句;更好地理解一些术语,例如:MySQL 5.6中
阅读全文
摘要:Scale-up(纵向扩展)和Scale-out(横向扩展)的解释 谈到系统的可伸缩性,Scale-up(纵向扩展)和Scale-out(横向扩展)是两个常见的术语,对于初学者来说,很容易搞迷糊这两个概念,这里总结了一些把概念解释的比较清楚的内容。 首先来段Wikipedia的,讲的很透彻了。Scale vertically (scale up) To scale vertically (or scale up) means to add resources to a single node in a system, typically involving the addition o...
阅读全文
摘要:可以使用B-Tree索引的查询类型全值匹配 :和索引中的所有列进行匹配匹配最左前缀 :可只是用索引的第一列匹配列前缀 :也可以只匹配某一列的值的开头部分匹配范围值 :查找在某个范围的精确匹配某一列并范围匹配另外一列 :即第一列全批评,第二列范围匹配B-Tree索引的一些限制如果不是按照索引的最左列开始查询,则无法使用索引不能跳过索引中的列,只有索引中的1、3列缺失了第二列,则只能使用索引的第一列如果查询中有某个列的范围查询,则其右边的所有列无法使用索引进行优化查询高性能索引的策略独立的列 ”独立的列“ 是指索引列不能是表达式的一部分,也不能是函数的参数前缀索引和索引的选择性 有时需要索引很长的
阅读全文
摘要:转自:http://blog.sina.com.cn/s/blog_3f776cca0100xka5.html最近有用到mysql批量更新,使用最原始的批量update发现性能很差,将网上看到的总结一下一共有以下三种办法:1.批量update,一条记录update一次,性能很差update test_tbl set dr='2' where id=1;2.replace into 或者insert into ...on duplicate key updatereplace into test_tbl (id,dr) values(1,'2'),(2,'
阅读全文
摘要:在 explain的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快。如果由于不恰当使用索引而引起一些问题的话,可以运行 analyze table来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择。explain 返回了一行记录,它包括了select语句中用到的各个表的信息。这些表在结果中按照mysql即将执行的查询中读取的顺序列出来。mysql用一次扫描多次连接(single-sweep,multi-join)的方法来解决连接。这意味着mysql从第一个表中读取一条记录,然后在第二个表中查找到对应的记录,然后在第三个表中查找,依次类
阅读全文
摘要:我们经常在telnet终端操作MySQL数据库时会遇到中文乱码问题,这主要是因为字符集设定错误造成的。这里面涉及到好几个地方的字符集设置,如果我们搞清楚它后面的原理,就可以很容易解决这些乱码问题。 在MySQL的客户端上执行一次查询的过程一般是,在客户端的提示符后面输入一条SQL语句,回车,然后终端显示出查询的结果。这个过程中,只有终端和 三个MySQL的系统变量指定了正确的字符集,才能保证我们将一个正确的SQL语句送到服务器,然后服务器返回正确的结果,并且在终端正确显示。 三个MySQL的系统变量是: ①character_set_client,终端字符集,告诉Server客户端提交...
阅读全文
摘要:第一次和第二次的插入数据在hive中创建视图checkin_spot字段有id、create_time、device存放所有用户checkin相关的信息计数的统计:checkin_spot 安id分组create_time 升序排列 取前两条记录的creat_time字段差 如果在(<7)范围内计数 (7<&&<30)计数 (30<&&<60)范围计数 (>60)计数这样做只能每次统计一种的,如:<7范围内的具体查询语句:select count(*) from (select datediff(ss.maxd,ss.m
阅读全文
摘要:以下的文章主要介绍的是MySQL force Index 强制索引,以及其他的强制操作,其优先操作的具体操作步骤如下:我们以MySQL中常用的hint来进行详细的解析,如果你是经常使用Oracle的朋友可能知道,Oracle的hincvt功能种类很多,对于优化sql语句提供了很多方法。同样,在MySQL里,也有类似的hint功能。下面介绍一些常用的。强制索引MySQL FORCE INDEXSELECT*FROMTABLE1FORCEINDEX(FIELD1)…以上的SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。忽略索引 IGNORE INDEXSELECT*FROMT
阅读全文
摘要:来自http://www.codesky.net/article/200907/168892.htmlMySQL的客户端命令行工具,有很多方便使用者的特性,某些方面甚至可以说比Oracle的sqlplus更加人性化。当然从整体来说,还是sqlplus更加方便些,这么说或许是我对sqlplus更加熟悉吧。这里记录下MySQL命令行几个比较常用的特性。1.使用G按行垂直显示结果如果一行很长,需要这行显示的话,看起结果来就非常的难受。在SQL语句或者命令后使用G而不是分号结尾,可以将每一行的值垂直输出。这个可能也是大家对于MySQL最熟悉的区别于其他数据库工具的一个特性了。mysql> sel
阅读全文
摘要:mysql中insert into和replace into以及insert ignore用法区别: mysql中常用的三种插入数据的语句:insert into表示插入数据,数据库会检查主键,如果出现重复会报错;replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据;
阅读全文