MySQL EXPLAIN 之 UsingTemporary 和 UsingFilesort 解决案例
首先查看explain执行计划,让主要查询语句使用索引,索引type级别最好达到ref | ref_eq级别 其次将extra一栏的Using temporary(临时表)、Using filesort(文件排序)拖出去砍了 第一条语句 123explain select * from tb_wm_shop where is_delete != 1 and is_authentication = 1 ORDER BY create_time DESC 大家应该知道使用order by的 字段要使用索引,这条语句中create_time已经创建了索引,但是计划中并没有使用该索引,导致出现了Using filesort文件排序,使其查询变慢 解决方法如下: 从where条件开始,依照顺序创建一个组合索引,就可以砍掉Using filesort这个令人讨厌的头颅了 注意:必须依照顺序,在创建组合索引时,where条件的字段在orderBy的字段之前,如果orderBy是多字段,则必须依照顺序创建 详情可参考链接:https://blog.csdn.net/dingxingmei...
MySQL 用户权限总结
转自: https://blog.csdn.net/yeahPeng11/article/details/121584343 一、MySQL用户权限 MySQL版本5.7 背景 在开发过程中数据库安装在云服务器,本地连接阿里云服务器中的MySQL就不能直接root用户连接,而每次数据库操作都要使用新建的用户与用户进行交互操作。 在使用非root用户的时,执行本地的sql文件,就需要一些权限,比如 SELECT,INSERT,UPDATE,DELETE,CREATE 等等权限 添加MySQL用户并设置权限的好处:新的SQL用户不允许访问访问属于其他SQL用户的库或表,甚至不能使用SELECT语句。新的SQL用户必须显式的被授予权限,才能执行对应的操作。 二、用户权限介绍1.权限级别 全局:可以管理整个MySQL 数据库:可以管理指定的数据库 数据表:可以管理指定数据库的指定表 字段:可以管理指定数据库的指定表的指定字段 权限存储在mysql库的user,db,tables_priv,columns_priv,procs_priv这几个系统表中,待MySQL实例启动后就加载到内存...
MySQL 数据备份与恢复
备份 - 从数据库导出数据:格式:mysqldump -h链接ip -P(大写)端口 -u用户名 -p密码数据库名 > d:XX.sql(路径) 示例:mysqldump -h132.72.192.432 -P3307 -uroot -p8888 htgl > bak.sql 备份导出示例:1、导出数据和表结构——将特定数据库特定表中的数据和表格结构和数据全部返回 1mysqldump --u b_user -h 101.3.20.33 -p'H_password' -P3306 database_di up_subjects > 0101_0630_up_subjects.sql 2、导出表结构却不导出表数据——只返回特定数据库特定表格的表格结构,不返回数据,添加“-d”命令参数 1mysqldump --u b_user -h 101.3.20.33 -p'H_password' -P3306 -d database_di up_subjects > 0101_0630_up_subjects.sql ...
MySQL 5.7 安装
MySQL5.7docker安装mysql docker pull mysql:5.7 123456docker run -p 3306:3306 --name mysql \-v /mydata/mysql/log:/var/log/mysql \-v /mydata/mysql/data:/var/lib/mysal \-v /mydata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-d mysql:5.7 vi /mydata/mysql/conf/my.cnf 1234567891011[client]default-character-set=utf8[mysql] default-character-set=utf8[mysqld]init_connect='SET collation_connection=utf8_unicode_ci'init_connect='SET NAMES utf8'characte...
MySQL 命令行各个参数解释
http://blog.51yip.com/mysql/1056.html mysql命令行各个参数解释123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081Usage: mysql [OPTIONS] [database] //命令方式 -?, --help //显示帮助信息并退出 -I, --help //显示帮助信息并退出 --auto-rehash //自动补全功能,就像linux里面,按Tab键出提示差不多,下面有例子 -A, --no-auto-rehash //默认状态是没有自动补全功能的。-A就是不要自动补全功能 -B, --batch //ysql不使用历史文件,禁用交互 (Enables --silent) --c...
MySQL 导入导出
导入导出csv文件 常用参数 12345常用参数(导入和导出的常用参数一致):FIELDS TERMINATED BY ',':指定字段分隔符OPTIONALLY ENCLOSED BY '"':认为双引号中的是一个独立的字段。Excel 转 CSV 时,有特殊字符(逗号、顿号等)的字段,会自动用双引号引起来LINES TERMINATED BY '\n':指定行分隔符,默认'\n'。注意,在 Windows 平台上创建的文件,分隔符是 '\r\n' 先检查是否开启允许导入 1show variables like '%secure%'; 导入12345678LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE db2.my_table;LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE db2.my_table FIELDS TER...
利用 Python 脚本进行 MySQL 数据库(表)传输
Usage Example: 1234567Copy 整个 database:python mysql_transfer.py --src-host=127.0.0.1 --src-user=root --src-password=123 --src-db=源db \ --tgt-host=127.0.0.1 --tgt-user=root --tgt-password=456 --tgt-db=目标dbCopy 指定 tables:python mysql_transfer.py --src-host=127.0.0.1 --src-user=root --src-password=123 --src-db=源db \ --tgt-host=127.0.0.1 --tgt-user=root --tgt-password=456 --tgt-db=目标db --tables source_table1:target_table1 source_table2:target_table2 Python Script(mysql_transfer.py): 12345678...
MySQL 数据库设计规范
数据库设计基本规范数据库 采用InnoDB引擎,禁用其他类型引擎 采用utf8mb4字符集 只允许访问所属数据库,禁止跨库访问 禁止临时任务表长期存在于数据库中 创建数据库/表的时候,还要对排序规则进行审查: 需要区分特殊字符:默认的general_ci 更快,但是unicode_ci 更准确,utf8mb4_general_ci中S=ß,而utf8mb4_unicode_ci中ss=ß ,这种情况unicode_ci能准确判断(参考:http://mysql.rjweb.org/utf8mb4_collations.html) 大小写敏感:默认的general_ci大小写不敏感,utf8mb4_unicode_ci大小写不敏感,但utf8mb4_bin 大小写敏感 表/列/索引命名 全部采用英文单词小写,单词间下划线分割,禁用拼音 表明中包含的单词采用单数,禁用复数 表名以**业务名称_**开头, 列名以表名**业务名称_xxx的xxx**开头,(除了逻辑删除列、创建时间、更新时间和关联其他表的列之外所有属于本表的基本字段...
MySQL 集群部署
Mysql常见集群方式 Mysql-MMM(mysql主主复制管理器) MHA(Mysql高可用方面是一个相对成熟的方案) InnoDB Cluster(支持自动Failover,强一致性,读写分离,读库高可用,读请求负载均衡,推荐方案) 主从同步创建Master实例并启动123456docker run -p 3307:3306 --name mysql-master \-v /mydata/mysql/master/log:/var/log/mysql \-v /mydata/mysql/master/data:/var/lib/mysql \-v /mydata/mysql/master/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-d mysql:5.7 参数说明: 123-p 3307:3306:将容器的3306映射到主机的3307端口-v 挂载-e 初始化root用户密码 修改master基本配置123456789101112131415161718vim /mydata/mysql/master/...
SQL 语句优化的一些方法
sql语句优化的一些方法避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 避免在 where 子句中使用!=或<>操作符应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 避免在 where 子句中对字段进行 null 值判断应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: 12345select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 避免在 where 子句中使用 or 来连接条件应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: 123456789select id from t where num=10 or num=20可以这样查询:select id from ...
