zoukankan      html  css  js  c++  java
  • 叶问19

    《叶问》是知数堂新设计的互动栏目,不定期给大家提供技术知识小贴士,形式不限,或提问、或讨论均可,并在当天发布答案,让大家轻轻松松利用碎片时间就可以学到最实用的知识点。

    2019年09月03日,周二

    如何将excel数据导入MySQL表中?

    将excel导入MySQL表的方式有很多,这里列举几种平时常用的方法:

    1、将excel另存为csv文件,再使用LOAD DATA导入表,命令参考如下:

    LOAD DATA INFILE 'c:/tmp/discounts.csv'

    INTO TABLE discounts

    FIELDS TERMINATED BY ','

    ENCLOSED BY '"'

    LINES TERMINATED BY ' '

    IGNORE 1 ROWS;

    2、利用Navicat、MySQL Workbench等第三方工具进行导入

    3、excel利用函数拼接成insert SQL进行数据插入(数据量大时不推荐,效率极低)

    4、例行批量导入,安利python的xlwt模块

    注意:进行数据导入时注意先执行set names设置字符集,以免造成乱码

    2019年09月05日,周四

    用xtrabackup跑mysql物理备份,建议授予哪些权限?

    可能需要用到以下权限:

    1、RELOAD and LOCK TABLES (用于FLUSH TABLES WITH READ LOCK 和 FLUSH ENGINE LOGS)

    2、BACKUP_ADMIN (用于查询表performance_schema.log_status, 执行LOCK INSTANCE FOR BACKUP, LOCK BINLOG FOR BACKUP, 或 LOCK TABLES FOR BACKUP)

    3、REPLICATION CLIENT(获取一致性位点)

    4、PROCESS(用于执行SHOW ENGINE INNODB STATUS或者查看线程状态等)

    5、SUPER(复制环境下用于start/stop the slave threads)

    6、SELECT(使用选项--incremental-history-name or --incremental-history-uuid时获取innodb_to_lsn插入到PERCONA_SCHEMA.xtrabackup_history表)

    2019年09月10日,周二

    select里用rand(),怎么优化效率?

    案例:

    select id from t1 where id = round(rand()*13241324);

    其中id列是IINT类型的主键

    一、问题点

    该SQL的问题点主要在于当使用rand()匹配时,实际上是逐行提取数据,rand()每次生成一个随机数进行单行匹配,即如果t1表有100万数据就会匹配100万次,即便有索引也没用,也要全表扫描

    二、优化方式

    优化方式主要有2种思路,第一种是通过子查询关联,第二种是通过范围查询加limit 1,如下所示:

    1、select id from t1 join (select round(rand()*13241324) as id2) as t2 where t1.id = t2.id2

    2、select id from t1 where id > (select round(rand()*(select max(id) from t1)) as nid) limit 1

    再次提醒,不要用rand()直接进行匹配或者排序,会引发性能灾难

    参考:

    http://imysql.com/2014/07/04/mysql-optimization-case-rand-optimize.shtml

    2019年09月17日,周二

    现在业内常用的MySQL高可用方案有哪些?

    目前来说,比较多的开源方案分内置高可用与外部实现,内置高可用有如下:

    1、官方版本分支:MGR(首推)

    2、percona分支:PXC

    3、MariaDB:Galera Cluster

    外部实现方案:

    1、orchestrator(GTID)

    2、replication-manager(GTID)

    3、MHA(传统复制)

    4、MOHA(支持多AZ部署)

    5、其他...

    2019年09月19日,周四

    什么时候MySQL的索引"失效"不可用?

    1、通过索引扫描的记录超过20%~30%,可能会变成全表扫描

    2、联合索引中,查询条件不符合左侧前导要求

    3、查询条件列最左以通配符%开始

    4、查询条件发生数据类型隐式转换,或者字符集不匹配

    5、HEAP表使用HASH索引时,使用范围检索或者ORDER BY

    6、多表关联时,排序字段不属于驱动表,无法利用索引完成排序

    7、JOIN查询时,关联列数据类型(字符集)不一致也会导致索引不可用

    8、不可见索引,即便force index也不可用

    9、违反索引排序规则

    详情请戳叶老师公开课:「周四见」第108期—《MySQL索引为何“失效”》

    2019年09月24日,周二

    MySQL从库show processlist出现system lock的原因以及解决方法有哪些?

    由于大量的小事物如UPDATE/DELETE table where一行数据,这种只包含一行DML event的语句,table是一张大表。

    1、这个表上没有主键或者唯一键,可以考虑尝试修改参数slave_rows_search_algorithms。

    2、由于类似innodb lock堵塞,也就是slave从库修改了数据同时和sql_thread也在修改同样的数据。

    3、确实I/O扛不住了,修改sync_binlog/innodb_flush_log_at_trx_commit或者提高IO子系统的IO能力

    友情提示:

    MySQL数据库表建议都设置int/bigint的自增主键,"业务主键"设置为not null + 唯一索引

  • 相关阅读:
    Spring学习-- AOP入门动态代理
    Spring学习--泛型依赖注入
    Spring学习--通过注解配置 Bean (三)
    Spring学习--通过注解配置 Bean (二)
    Spring学习--通过注解配置 Bean (一)
    十 字符串处理
    九 Shell中的数组
    八使用Shell函数
    七 循环结构
    六、流程控制语句
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11679738.html
Copyright © 2011-2022 走看看