mysql创建索引

MySQL 快速删除大量数据

匿名 (未验证) 提交于 2019-12-02 22:06:11
千万级数据量 方案1、 直接使用delete 因delete执行速度与索引量成正比,若表中索引量较多,使用delete会耗费数小时甚至数天的时间 方案2、 (1)创建临时表,表结构与原表结构相同 (2)将需要保留的数据插入至临时表中 (3)drop原表 (4)将临时表改名为原表名 经过测试,drop表一般耗时在3秒以内 此方案主要耗时步骤为第二步,若需要保留的数据量不大时,此方案是最佳方案 来源:博客园 作者: 对我有点小自信 链接:https://www.cnblogs.com/luxd/p/11450881.html

mysql实践:sql优化

匿名 (未验证) 提交于 2019-12-02 22:06:11
---恢复内容开始--- 设计表的时候 1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差) 3. 最好不要有为Null的列,原因: https://mp.weixin.qq.com/s/U4RRNVj5BKwkQ-CWmPd9Fg 查询表的时候 1. 最好不要使用联表查询(风险不可控)【理论上禁止】 2. 不要在字段当中进行函数运算【禁止】 3. 尽量不要使用now()函数进行查询【禁止】 5. 删除全表数据的时候用truncate而不是delete 6. 尽量不要使用模糊匹配 '%abc%'【理论上禁止】 7. sql语句不要写的过于复杂,逻辑判断尽量在内存中完成 8. 不要加入触发器 9. 使用explain查看执行计划 加索引的时候 1. 添加索引的字段一定要有很好的区分度【cardinality】 2. 更新数据的时候最好使用主键作为更新条件 3. 加入联合索引要把区分度高的字段放在前面 4. 不常访问的列不要加索引 5. 长字符串不要加索引,如果一定要加,选取字符串的前n位加上。(n根据实际情况设定,经验值不会超过20) ---恢复内容结束--- 设计表的时候 1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差) 3. 最好不要有为Null的列,原因: https://mp

20道BAT面试官最喜欢问的JVM+MySQL面试题(含答案解析)

匿名 (未验证) 提交于 2019-12-02 22:02:20
1. 内存模型以及分区,需要详细到每个区放什么。 JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面, class 类信息常量池(static 常量和 static 变量)等放在方法区 new: 方法区:主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字 节码)等数据 堆:初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要 在堆上分配 栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操 作数栈,方法出口等信息,局部变量表存放的是 8 大基础类型加上一个应用类型,所 以还是一个指向地址的指针 本地方法栈:主要为 Native 方法服务 程序计数器:记录当前线程执行的行号 2. 堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。 堆里面分为新生代和老生代(java8 取消了永久代,采用了 Metaspace),新生代包 含 Eden+Survivor 区,survivor 区里面分为 from 和 to 区,内存回收时,如果用的是复 制算法,从 from 复制到 to,当经过一次或者多次 GC 之后,存活下来的对象会被移动 到老年区,当 JVM 内存不够用的时候,会触发 Full GC,清理 JVM 老年区 当新生区满了之后会触发 YGC

Mysql数据实时同步到Elasticsearch |

匿名 (未验证) 提交于 2019-12-02 22:02:20
在某些情况下,我们只需要 MySQL 的客户端,而不需要完整的MySQL服务器。比如当你需要连接到远程的 MySQL 服务器的时候。 如果只需安装客户端的话,可以使用命令: 如果需要安装Mysql服务,使用如下命令: 将Mysql的日志格式改为 日志格式可以再mysql运行时改变 参考 https://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html 安装Go(1.9+)并设置你的GOPATH 进入下载页面 https://golang.google.cn/dl/ 下载相应版本的go安装包,解压 export PATH=$PATH:/path/to/go/bin go-mysql-elasticsearch可以将MySQL数据自动实时同步到Elasticsearch。 它首先用于mysqldump获取表中已有的数据,然后根据binlog将表的所有操作同步到ES。 数据的插入,更新,删除和增加字段操作,都可以及时同步到ES,ES索引中的字段可以比mysql中多。 将其下载到服务器,它会在控制台中打印一些消息,跳过它。:-) 在MySQL中创建表。 如果可能,创建关联的Elasticsearch索引,文档类型和映射,否则,Elasticsearch将自动创建这些索引。 配置库,请参阅示例config river.toml。

mysql优化-面试题

匿名 (未验证) 提交于 2019-12-02 22:02:20
第一方面:30种mysql优化sql语句查询的方法 1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。    2. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。    3. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num is null   可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:   select id from t where num=0    4. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num=10 or num=20   可以这样查询:   select id from t where num=10   union all   select id from t where num=20    5. 下面的查询也将导致全表扫描:   select id from t where name like '%abc%'   若要提高效率,可以考虑全文检索。    6. in 和 not in 也要慎用

MySQL、HBase、ES的特点和区别

匿名 (未验证) 提交于 2019-12-02 22:02:20
hbase是列数据库,是kv结构的,ES的基于Lucene的搜索引擎的面向文档数据库吧 ES是搜索引擎,主要的优势在于快速搜索,HBase是数据库,优势在于存储数据,侧重点不同 MySQL:关系型数据库,主要面向OLTP,支持事务,支持二级索引,支持sql,支持主从、Group Replication架构模型(本文全部以Innodb为例,不涉及别的存储引擎)。 HBase:基于HDFS,支持海量数据读写(尤其是写),支持上亿行、上百万列的,面向列的分布式NoSql数据库。天然分布式,主从架构,不支持事务,不支持二级索引,不支持sql。 ElasticSearch:ES是一款分布式的全文检索框架,底层基于Lucene实现,虽然ES也提供存储,检索功能,但我一直不认为ES是一款数据库,但是随着ES功能越来越强大,与数据库的界限也越来越模糊。天然分布式,p2p架构,不支持事务,采用倒排索引提供全文检索。 数据存储方式 假设有这样一张人员信息表: MySQL中要提前定义表结构,也就是说表共有多少列(属性)需要提前定义好,并且同时需要定义好每个列所占用的存储空间。数据以行为单位组织在一起的,假如某一行的某一列没有数据,也需要占用存储空间。 HBase则是以列为单位存储数据,每一列就是一个key-value,HBase的表列(属性)不用提前定义,而且列可以动态扩展

MySQL数据库设计规范

匿名 (未验证) 提交于 2019-12-02 22:02:20
参考阿里巴巴MySQL数据库设计规范,详细信息可查看《阿里巴巴Java开发手册》第五章。 表达是否概念的字段,必须使用 is_xxx 的方式命名,数据类型必须为 unsigned tinyint(1) ; 例如 :是否是删除状态应该使用 is_delete ; 数据库名、表名、字段名只能使用 *小写字母(a-z)、划线(_) 、阿拉伯数字(0-9)* 组成, 禁止使用 中文、大写字母、特殊符号、mysql关键字 命名。 例如 :正例 user_name0,反例 userName0 附《MySQL》关键字大全 : https://dev.mysql.com/doc/refman/5.7/en/keywords.html 表名应以 模块名_表作用 命名; 例如 :系统权限表 sys_permission,车辆保险表 card_insurance,支付配置表 pay_config 主键索引(primary key)的索引名为 pk_字段名 ,唯一索引(unique key)的索引名为 uk_字段名 , 普通索引(index)的索引名为 idx_字段名 。 存储小数使用 decimal ,如果精度超过限制的,可把整数和小数分开存储。 例如 :我们存储 124.123,数据类型定义为:decimal(16,3) 固定长度 的应使用 char(n),n表示存储的字符数。 提示

SQL语句优化

匿名 (未验证) 提交于 2019-12-02 22:02:20
怎么加快查询速度,优化查询效率,主要原则就是应尽量避免全表扫描,应该考虑在where及order by 涉及的列上建立索引。   建立索引不是建的越多越好,原则是:   第一:一个表的索引不是越多越好,也没有一个具体的数字,根据以往的经验,一个表的索引最多不能超过6个,因为索引越多,对update和insert操作也会有性能的影响,涉及到索引的新建和重建操作。   第二:建立索引的方法论为:   多数查询经常使用的列;   很少进行修改操作的列;   索引需要建立在数据差异化大的列上   利用以上的基础我们讨论一下如何优化sql. 1、sql语句模型结构优化指导     a. ORDER BY + LIMIT组合的索引优化       如果一个SQL语句形如:SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT];       这个SQL语句优化比较简单,在[sort]这个栏位上建立索引即可。     b. WHERE + ORDER BY + LIMIT组合的索引优化       如果一个SQL语句形如:SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [VALUE] ORDER BY [sort]

MySQL问题排查工具介绍

匿名 (未验证) 提交于 2019-12-02 21:59:42
本总结来自美团内部分享,屏蔽了内部数据与工具 索引是存储引擎用于快速找到记录的一种数据结构 B-Tree,适用于全键值,键值范围或键最左前缀:(A,B,C): A, AB, ABC,B,C,BC 哪些列建议创建索引:WHERE, JOIN , GROUP BY, ORDER BY等语句使用的列 如何选择索引列的顺序: 经常被使用到的列优先 选择性高的列优先:选择性=distinct(col)/count(col) 宽度小的列优先:宽度 = 列的数据类型 未使用索引 索引不优 服务器配置不佳 死锁 ... mysql -V 客户端版本 select version 服务器版本 type const,system: 最多匹配一个行,使用主键或者unique进行索引 eq_ref: 返回一行数据,通常在联接时出现,使用主键或者unique索引(内表索引连接类型) ref: 使用key的最左前缀,且key不是主键或unique键 range: 索引范围扫描,对索引的扫面开始于某一点,返回匹配的行 index:以索引的顺序进行全表扫描,优点是不用排序,缺点是还要全表扫描 all: 全表扫描 no no no extra using index : 索引覆盖,只用到索引,可以避免访问表 using where: 在存储引擎检索行后再做过滤 using temporary:使用临时表

MySQL添加、删除索引

匿名 (未验证) 提交于 2019-12-02 21:59:42
1.索引类型 UNIQUE ( 唯一索引 ):不可以出现相同的值,可以有NULL值; INDEX ( 普通索引 ):允许出现相同的索引内容; PROMARY KEY ( 主键索引 ):不允许出现相同的值; fulltext index ( 全文索引 ):可以针对值中的某个单词,但效率确实不敢恭维; 组合索引 :实质上是将多个字段建到一个索引里,列值的组合必须唯一; 2. 用 alter table 语句创建索引 应用于表创建完毕之后再添加; 可用于创 建普通索引 、 UNIQUE索引 和 PRIMARY KEY 索引3种索引格式, table_name 是要增加索引的表名, column_list 指出对哪些列进行索引,多列时各列之间用逗号分隔。 索引名 index_name 可选 ,缺省时,MySQL将根据第一个索引列赋一个名称。 另外,ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引。 ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名); -- 普通索引 alter table table_name add index index_name (column_list) ; -- 唯一索引 alter table table_name add unique