设为首页 收藏本站
查看: 805|回复: 0

[经验分享] aaron note mysql-Aaron的笔记

[复制链接]

尚未签到

发表于 2018-10-3 09:08:09 | 显示全部楼层 |阅读模式
  mysql 绑定变量, query cache
  其实MySQL中有内存表了, 完全可以不用这个功能. 对于Query Cache, MySQL提供了query_cache_type变量来控制发送到数据库的SQL是否进行Cache, 有三个值:
  0, 对SQL语句不进行Cache.
  1, 对于有SQL_NO_CACHE提示的SQL不进行Cache.
  2, 仅对于有SQL_CACHE进示的SQL进行Cache.
  新版的PHP5提供的接口mysqli支持Bound Parameters,mysql版本需要4.1以上,例子:
  代码:
prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
  $stmt->bind_param('sssd', $code, $language, $official, $percent);
  $code = 'DEU';
  $language = 'Bavarian';
  $official = "F";
  $percent = 11.2;
  /* execute prepared statement */
  $stmt->execute();
  %>
  mysql的存储过程,临时变量用@
  存储过程,mysql5及以后declare的变量支持作用范围,范围可以小到一个begin end(全局和局部可以声明同样的变量名)
  系统数据字典: INFORMATION_SCHEMA库和mysql库中
  支持Event Scheduler
  innoDB支持事务,支持行级锁(必须有索引才能行级锁),行级锁有开销(与oracle不同),开销大(与MyiSAM相比)
  innoDB用于OLTP,并发好
  innoDB采用表空间存储,支持分区Partitioning
  innodb_flush_log_at_trx_commit 如果事务要求不是非常严格的话, 设为0或2可以上百倍提高insert update的并发数量
  myisam单表order by的字段有索引的情况下, 还是会using filesort
  innodb不会
  mysql 5.1 分区表不支持唯一索引
  主从之间用复制, 相同的主之间用DRBD, 不同的主之间用sharding或分区表
  sharding比分区表好, 没有单点风险, 价格低廉
  sharding: http://www.dbanotes.net/database/database_sharding.html
  InnoDB不支持在一个数据表里使用复合索引来生成多个互不干扰的序列编号
  查询where中有a和b两个字段,建复合索引index(a,b),比在a、b上分别建索引要快
  复合索引有时也适合用于第一个字段的查询
  复合索引左前缀性:必须用到索引的第一个字段
  索引前缀性:只能like '1%',不能like '%1'
  在字段前加了函数,则索引会被抑制
  对innoDB执行 select count(*) from table_name的时候,后面跟一个where 索引字段> ,会快很多
  use 'multiple-row INSERT'
  范围型select会引起Next-Key Locking
  InnoDB支持多版本读(很好, 很强!!!)
  InnoDB, for upate和lock in share mode用于行级锁和表级共享锁
  innoDB数据恢复工具: http://code.google.com/p/innodb-tools/wiki/InnodbRecoveryHowto
(  innodb_buffer_pool_size越大越好,官方推荐使用物理内存的50%-80%
  innodb_flush_method=O_DIRECT是必须的,而innodb_log_file_size也不宜太大
  见 MySQL InnoDB性能调整的一点实践
) mysql备份 导出(mysqldump很快):方法一 (不能支持sql语句):mysqldump -h127.0.0.1 -P3306 -uroot -proot -t --default-character-set=UTF8 db_name table_name > bak.sql(mysqldump支持MyISAM和InnoDB, 可以备份单个表、单个库或所有库)方法二 (不能支持分隔符、换行符等):mysql -h127.0.0.1 -uroot -proot --default-character-set=UTF8 db_name -r -N -e &quot;select * from table_name&quot; > bak.sql方法三 (不能支持在第一行包含字段名称):select * into outfile 'bak.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;' LINES TERMINATED BY '\n' FROM table_name;方法四 (方法三的改进):(select 'col1','col2') union all (select col1,col2 FROM table_name into outfile 'data.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;' LINES TERMINATED BY '\n');   mysql还原 导入(Load Data Local InFile很快):mysql -h127.0.0.1 -uroot -proot --default-character-set=UTF8 db_name -e &quot;LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE table_name Fields TERMINATED BY '\t' ENCLOSED BY '\&quot;' LINES TERMINATED BY '\n' (id,name)&quot;或mysql -u root -p db_name < 文件InnoDB引擎可以通过binlog还原到时间点  由于spring连接池每次执行sql不一定是同一个连接, 所以写了一个通用存储过程:
drop procedure if exists add_and_return_insert_id;  delimiter ?
  create procedure add_and_return_insert_id(s text)
  begin
  DECLARE stmt text;
  set @sqlstr=s;
  prepare stmt from @sqlstr;
  execute stmt;
  select LAST_INSERT_ID();
  end?
  delimiter ;
存储过程中的事务:只有oracle高级, 存储过程 触发器默认级别就是 事务级的, SQL Server 2005开始也有了try...catch的功能mysql可能只能通过每个语句后面用select @error来判断, 不是null就执行rollback; 否则最后执行commit;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-608339-1-1.html 上篇帖子: yum快速安装mysql-ontheway2015 下篇帖子: 安装MYSQL 5.6-Epicor, magento-51CTO博客
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表