您现在的位置:首页
--> MySQL
我们开发自己的存储引擎页面缓存替换策略的过程中主要是参考了InnoDB与LRU-K算法。InnoDB缓存替换策略使用分代与LRU相结合的方式。分为old和young两个分代,系统维护old分代占总buffer大小的3/8左右。当一个页面第一次被访问时,是加入到old分代的lru头。并不是每次访问一个页面时就将这个页提到lru的头部,而是在这个页面在LRU中的位置调整后,是否有很多页面已经被替换出去,若有,则将这个页面移到LRU头。系统在每个页记录调整...
• 字符与字节
char以字符来计算,一个中文一个英文都是占1个字符;Binary以字节来计算,一个英文占1个字节,一个中文占2个字节。
刚刚接触mysql的人(like me),可能对这2个概念不是太理解,这里小小解释一下,希望能说明清楚这个问题。 字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。字符集还是比较容易理解的,主要是校验规则,下面我简单举个例子来说明一下:如在某个字符集“X”的A与a,他们的底层编码分别是A=0,a=100。这里符号“A”“a”和底层编码“0”“100”就是字符集...
默认情况下,我们可以在4个级别分别设定mysql的字符集和校验规则,分别是server、database、table和column。实际上,我们甚至还可以单独对一串字符串设定其字符集和校验规则。下面就分别来对四个级别的设定说明一下: server: 在启动mysql服务的时候,可以指定mysql server的字符集和校验规则,通过如下方式:mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci 如果不亲自指定它们,那么mysql就会使用...
这里首先需要解释的是,我想应该就是连接通道的含义了。那什么是连接通道呢? 所谓连接通道,就是客户端和服务器端保持连接的一个通道,它是逻辑上的一个概念。客户端通过连接通道发送sql语句到服务器端,服务端执行,将结果再通过连接通道返回至客户端。the connection is the pass when you connect to the server. 这个过程中,有几个临界点(逻辑上概念),是我们需要注意的,mysql也就在这几个临界点上做了文章。 1、当语句...
• 设计一定要有眼界
孟霆(2009-04-24 17:32:08): 字符转换成时间,where 条件中进行比较:如select concat(year,\'-\',month,\'-\',date) times where times>subdate(now(),interval 30 day) /注:year,month,date 为表中的字段,分别代表年,月,日丁原(2009-04-24 17:41:39): 你这个要搞什么孟霆(2009-04-24 17:42:43): 数据库中 有number 的 year ,number的month,number的date,三个字段,我想查3天前的怎么搞 设计上一定要有眼界,数据库中...
年纪大了,很多东西容易忘记,就当做流水记录下来吧。1.Mysql中,对于视图view,稍微复杂一点点的语法,比如视图定义中存在union,mysql的select查询就不走索引,走全表扫描。2.Innodb存储引擎:索引存储为键数据+PRIMARY KEY,比如id是主键,建status索引的话,索引数据存储为status+id,这样的话select查询时如果排序的话,尽量根据id来排序。3.Mysql sql_mode分为严格模式和非严格模式,非严格模式(即不启用STRICT_TRANS_TABLE...
1.字段尽量设置为not null2.减少数据转化3.优化count4.优化子查询,用join来代替子查询5.用union all来代替union 这些技巧微不足道,也正是大家容易忽略的。 链接如下:http://www.databasejournal.com/features/mysql/article.php/3813821/Five-Query-Optimizations-in-MySQL.htm
sync_binlog=1 or N This makes MySQL synchronize the binary log’s contents to disk each time it commits a transaction 默认情况下,并不是每次写入时都将binlog与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使binlog在每N次binlog写入后与硬盘同步。即使sync_binlog设置...
开发库和线上表结构有很多不一样,分表个数也不同,我需要重新整理保持开发库和线上一致,之前已经告知开发数据是否允许丢失,开发说数据可以不要了,直接丢掉,等我搞好之后开发告诉我部分数据(ring)是不能删除的,我晕,只好想办法来恢复数据了,没有备份,不过还好有全部的binlog。1.根据binlog解析出所有ring数据库的所有sql[mysql@DEV_SNS1 log]$mysqlbinlog --no-defaults --database=ring --start-datetime="20...
从来没有仔细写个Mysql的存储过程,正好花时间研究了一下。 写任何程序最基本的是先要有详细注释,有log记录,有异常异常等等,当然Mysql的异常处理机制很差,搞了半天都没有满意的结果。功能很简单,自动修改merge表的定义,并清理过期表的数据。DELIMITER $$DROP PROCEDURE IF EXISTS sp_rename_mergetable $$create procedure sp_rename_mergetable(in p_tablename varchar(60),in p_begincount int,in p_endcount int)B...
同一条记录,开发发现主库的创建时间和备库的创建时间不一致,刚开始怀疑是系统时间的问题,想想又不对,mysql的binlog里面会打自己的时间戳,那是什么原因呢? 项灵刚(2009-03-26 13:51:31): http://jianghu.taobao.com/u/MjAzMzA4ODI=/poll/poll_detail-12011.htm 项灵刚(2009-03-26 13:51:40): 三胜的投票记录也有两个时间陶方(14:07:56): insert into poll_record_s (JOIN_RECORD_ID,PRO_USER_ID,POLL_ID,REC_USER_ID,G...
这两天在对线上库进行初始化,需要导大量的数据到线上,使用Mysql的load data很容易实现。1.原始数据[mysql@DEV_SNS1 mysql]$ more 111.txt 2263,65025185,12263,61833350,22263,63713789,32263,28344254,42263,13134504,52580,59707749,12580,43,2....2.表结构如下root@test 10:53:27>desc tmp_dy;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+--------...
近几年web2.0的火爆,带动了Mysql的使用热潮,不管是小企业还是大网站,都有意无意的开始使用Mysql来搭建数据平台。传统网站随着业访问量,数据量的急剧膨胀,集中式的数据库也越来越成为瓶颈,很难做进一步的扩展,做读写分离,而这些都是Mysql的优势所在,容易扩展使Mysql渐渐成为了企业新的选择。 说到可扩展性,和app一样,当数据库压力上来时,只要通过不断增加数据库服务器来解决,尽量不去调整应用程序,服务器硬...
对于大批量过期的数据,Mysql中应该如何清理呢?项目环境:1.分表,可能会分成256张表,512张表等2.每个子表每天过期(超过3个月数据就算过期)的数据可能会超过100万,如何清理?暂时只想到批量循环删除,一直到返回结果为0,DELETE FROM table WHERE gmt_create>trunc(sysdate-90) LIMIT 10000,同时还要考虑时间索引右倾的情况,大家都应该知道,mysql重建索引是很麻烦的,要锁表。 欢迎提供不影响业务的情况下,更有效删除M...
.frm文件用来保持表和列的定义,表的索引和数据可能被存储在一个或多个文件里,这取决于表的类型。因为.frm里面只是保留表的定义,万一损坏的话恢复起来很简单的,只要在另外的库中重建个一模一样的表,然后copy .frm文件过来就可以了。 这篇文章不错:http://www.mysqlperformanceblog.com/2008/12/17/recovering-create-table-statement-from-frm-file/
Mysql 5.0 推出来的一个功能,在我看来和oracle差不多的,语法上稍微有一点点不同,下面写了一个例子模板,大家用到时可以很容易套用。 mysql> delimiter // --语句结束符更改为// --定义存储过程mysql>create procedure ptest(out return_val int)begindeclare a1 ,b1 int default 5; --定义变量declare cur1 cursor for select a from test; --定义游标declare exit handler for not found begin insert into test_error(m...
alter table运行时会对原表进行临时复制,在副本上进行更改,然后删除原表,再对新表进行重命名。在执行alter table时,其它用户可以阅读原表,但是对表的更新和修改的操作将被延迟,直到新表生成为止。新表生成后,这些更新和修改信息会自动转移到新表上。注意,如果您在执行alter table时使用除了rename以外的选项,则MySQL会创建一个临时表。即使数据并不需要进行复制(例如当您更改列的名称时),MySQL也会这么操作。对于Myisa...
mysql> use test;Database changedmysql> select count(*) from test;+----------+| count(*) |+----------+| 2097152 |+----------+1 row in set (0.00 sec)mysql> select * from test ORDER BY RAND() LIMIT 1;+--------+------+| a | b |+--------+------+| 765909 | |+--------+------+1 row in set (8.78 sec) --用了将近9s 引Mysql文档:You cannot use a column with RAND() values in an ORDER BY ...
排序也就是我们说的order by,Mysql更强调的是把排序字段也放在索引中,不需要回表,这是理想的实现方式,如果通过索引没有办法获得有序的数据,MySQL通过将取得的数据在内存中进行排序然后再将数据返回给客户端,有两种排序算法:一种是首先根据相应的条件取出相应的排序字段和定位行数据的行指针信息,然后在 sort buffer 中进行排序,最后根据排序结果回表取出需要的字段返回给客户端。另一种排序是在排序时就直接取出需...
近3天十大热文
- [69] IOS安全–浅谈关于IOS加固的几种方法
- [66] Twitter/微博客的学习摘要
- [63] 如何拿下简短的域名
- [61] android 开发入门
- [60] find命令的一点注意事项
- [59] Go Reflect 性能
- [57] 流程管理与用户研究
- [56] 图书馆的世界纪录
- [55] 【社会化设计】自我(self)部分――欢迎区
- [55] Oracle MTS模式下 进程地址与会话信
赞助商广告