mysql创建索引

[Java面试十二]数据库概念相关

南楼画角 提交于 2020-03-05 12:54:02
1. 什么是存储过程?它有什么优点? 答:存储过程是一组予编译的 SQL 语句, 它的优点有: 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。 允许更快执行,如果某操作需要执行大量 SQL 语句或重复执行,存储过程比 SQL 语句执行的要快。 减少网络流量,例如一个需要数百行的 SQL 代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。 更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。 2. oracle的 存储过程和函数有什么区别? Oracle 中的函数与存储过程的 区别 : A: 函数必须有返回值 , 而过程没有 . B: 函数可以单独执行 . 而过程必须通过 execute 执行 . C: 函数可以嵌入到 SQL 语句中执行 . 而过程不行 . 其实我们可以将比较复杂的查询写成函数 . 然后到存储过程中去调用这些函数 . Oracle 中的函数与存储过程的 特点 : A. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 B. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。 C. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于 FROM 关键字的后面。 3. 什么是事务? 答

记录一次 MongoDB aggregate的性能优化经历

陌路散爱 提交于 2020-03-04 22:00:38
在一台配置为2核4G的阿里云服务器上,硬盘是普通的云盘(即SATA盘),除mongoDB外,运行了若干个java应用,单节点mysql和redis,mongo的实际可用内存在1.5G左右。单表数据200万条的时候,一个聚合函数响应时间约为6秒,页面端每秒请求一次,由于响应不够及时,页面刷新不及时,服务端堆积了大量的mongo aggregate请求,系统可用内存不足,直接导致了溢出,mongo服务被动shutdown。 mongod(ZN5mongo15printStackTraceERSo+0x41) [0x55bd3a2dd321] mongod(ZN5mongo29reportOutOfMemoryErrorAndExitEv+0x84) [0x55bd3a2dc954] mongod(ZN5mongo12mongoReallocEPvm+0x21) [0x55bd3a2d22b1] mongod(ZN5mongo11BufBuilderINS21SharedBufferAllocatorEE15growreallocateEi+0x83) [0x55bd38981833] mongod(ZN5mongo3rpc17OpMsgReplyBuilder22getInPlaceReplyBuilderEm+0x80) [0x55bd39d4b740] mongod(

ElasticSearch学习日志——了解ElasticSearch

我的梦境 提交于 2020-03-04 15:52:35
文章目录 ElasticSearch是什么? 了解Luence 搜索 数据的分类 顺序扫描 全文搜索 Luence是怎么实现全文搜索 应用场景 ElasticSearch核⼼概念 ElasticSearch高扩展 ElasticSearch高实时 ElasticSearch是什么? 是一个基于 Luence 的 全文搜索引擎 ,基于RESTful web接口 ElasticSearch 是一个 分布式 、 高扩展 、 高实时 的 搜索 与 数据分析 引擎 了解Luence Lucene是一套用于 全文检索 和搜寻的开源程序库。其主要 目的就是解决全文搜索 。 那么全文搜索能有什么问题? 那我们先看看搜索 搜索 搜索:把数据找出来。对数据进行搜索,那就不得不提数据分类。 数据的分类 结构化数据 :具有 固定格式 或者 固定长度 的数据。对于结构化数据我们一般都是存储在关系型数据库table中;那么对于结构化数据搜索,一般是建立索引,通过B-tree等数据结构快速搜索。 非结构化数据 : 指没有 固定格式 或 不定长 的数据。如文章。那么对于非结构化数据我们怎么进行搜索呢?主要有两种方法:顺序扫描法,全文搜索法 顺序扫描 顺序扫描 :从头到尾扫描 一边,标记要搜索的关键词;这样的方法无疑效率是很低的。 全文搜索 全文搜索 :扫描非结构化数据,对每一个词建立一个索引

MySQL之架构与历史(二)

大憨熊 提交于 2020-03-03 23:08:15
多版本并发控制 MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。不仅是MySQL,包括Oracle、PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的实习标准。 可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制不同,但大都实现了非阻塞的读操作,写操作也只锁定了必要的行。 MVCC的实现,是通过保存数据在某个时间点的快照来实现的。也就是说,不管需要执行多长时间,每个事务看到的数据都是一致的。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。 前面说到不同存储引擎的MVCC实现是不同的,典型的有乐观(optimistic)并发控制和悲观(pessimistic)并发控制。下面我们通过InnoDB的简化版行为来说明MVCC是如何工作的。 InnoDB的MVVC,是通过在每行记录后面保存两个隐藏列来实现的。一个保存了行的创建时间,一个保存了行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号(system version number)。每开启一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为当前事务的版本号

mysql(3)mysql的sql语句入门

∥☆過路亽.° 提交于 2020-03-03 12:41:08
1.登录mysql与退出mysql 登录:mysql -u账号 -p密码 -h主机地址 -P端口号 -e 执行的sql语句; //密码一般不直接写出,回车后隐藏写入 ,-h可以不写默认是localhost 退出:quit,exit ,ctrl+c 备注:参数可分为全局和会话,可修改与不可修改,全局需要加上global,例如 set global 参数 =值,会话级别只对当前会话有效, 例如set 【session】 autocommit=1;中间可以省略session,例如需要全局的话需要 set global autocommit=1;不能持久化,重启后是默认值,全局设置对已经开启了会话的不起作用,只会对以后连接的会话有效,查看可以使用show 【global/session】 【variables 】 【like pattern】 变量名 来查看。 备注:dbms数据库管理系统 ,dba数据库管理员, sql(ddl 表结构,dml增删改 ,dql 查询,dcl数据库控制,tcl事物控制) 2.数据的导入与导出 1)数据的导入:source (运行在mysql下的命令) select version();//查看当前数据库版本; create database 数据库名称;//创建数据库 show databases ; //显示所有的数据库,产看数据库是否已经导入,也可以使用

MySQL 索引:语法及案例剖析

拈花ヽ惹草 提交于 2020-03-03 09:33:16
MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。 索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。 创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。 上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间的索引文件。 普通索引 创建索引 这是最基本的索引,它没有任何限制。它有以下几种创建方式: CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度

sql索引

左心房为你撑大大i 提交于 2020-03-03 05:47:26
1、创建索引 create index index_name on table_name 删除索引 delete index index_name on table_name 2、B-tree索引和Hash索引 hash索引只在memory支持。当我们要给某张表某列增加索引时,将这张表的这一列进行哈希算法计算,得到哈希值,排序在哈希数组上。所以Hash索引可以一次定位,其效率很高,而Btree索引需要经过多次的磁盘IO。 但是它存在很多缺点: ~只能用于等式比较,不能查询范围。 ~优化器不能用hash索引来加速Oder by操作。 ~不能用部分索引键来搜索,因为组合索引在计算哈希值的时候是一起计算的。只能使用整个关键字来搜索一行。 ~数据量特别大的时候,没有b-tree效率高。 3、建立索引的规则: ~利用最左前缀:Mysql会一直向右查找直到遇到范围操作(>,<,like、between)就停止匹配。比如a=1 and b=2 and c>3 and d=6;此时如果建立了(a,b,c,d)索引,那么后面的d索引是完全没有用到,当换成了(a,b,d,c)就可以用到。 ~不能过度索引:在修改表内容的时候,索引必须更新或者重构,所以索引过多时,会消耗更多的时间。 ~尽量扩展索引而不要新建索引 ~最适合的索引的列是出现在where子句中的列或连接子句中指定的列。

开发人员MySQL调优-实战篇2-让SQL使用索引详解

て烟熏妆下的殇ゞ 提交于 2020-03-02 07:34:12
建议先看看 开发人员MySQL调优-实战篇0 让执行的SQL使用索引 虽然DBA给我们建了很多索引,但没有经验的开发人员往往只看表结构,不太关注索引和如何利用索引提高SQL执行速度,下面罗列一些经验,让你写的SQL更加高效的利用索引 在做实验之前最好先想一想索引的数据结构与排序,以及索引工作的方式,才能更快的理解与记住这些点,否则在工作中遇到更复杂的情况,很可能就不会处理了 查询字段与某一个索引的结构完全一致,包括字段和顺序(完全匹配) create index idx_tv_v_user_u_a_g on tb_v_user(user_name,age,gendor); select * from tb_v_user where user_name = '1F7sJ' and age = 44 and gendor = 1; 查询条件与索引的列与顺序完全一致,执行计划扫描类型为ref。有兴趣的同学可以试试分别将user_name、age、gendor查询条件删除,看看执行计划是什么情况 不在列上做任何附加操作,比如加函数 select * from tb_v_user where left(user_name,5) = '1F7sJ' and age=44 and gendor = 1; 这里的SQL和上面的SQL执行结果是一模一样,写法上区别是在user

MySQL InnoDB索引的存储结构

大城市里の小女人 提交于 2020-03-01 22:51:25
InnoDB索引的数据结构 InnoDB索引采用了B-Tree的数据结构,数据存储在叶子节点上,每个叶子节点默认的大小是16KB。 当新记录插入到InnoDB聚簇索引中时,如果按顺序插入索引记录(升序或降序),当达到叶子节点最大的容量时,下一条记录就会写到新的的页中。叶子节点可使用的容量为总容量的15/16,InnoDB会留1/16的空间,以备将来插入和更新索引记录时使用, 如果以随机顺序插入记录,则页面的容量为1/2到15/16之间。 你可以设置 innodb_page_size 来调整页的大小,支持 64KB, 32KB, 16KB (默认), 8KB, 和4KB。 索引的分类 InnoDB的索引类型分为 主键索引和非主键索引 。 主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。整张表的数据其实就是存储在聚簇索引中的, 聚簇索引就是表 。 如果没有设置主键怎么办呢?MySQL会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键。 聚簇索引结构如下图所示: 非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。 二级索引的叶子节点中存的是主键的值 ,不是原始的数据

MySQL5.7常用命令

允我心安 提交于 2020-03-01 21:12:29
1、连接mysql 连接本机 mysql -u root -p 连接远程主机 mysql -h 192.168.1.128 -u root -p 退出 exit; 2、修改密码 格式:alter user 用户名@主机地址 identified by '新密码'; 将root密码改为newroot alter user root@local identified by 'newroot'; 查看用户主机地址方法 use mysql; select user,host from user; 3、管理用户 可以管理mysql数据库中的user表来管理用户。 对于用户方面的管理,最好对用户授予不同的权限来管理用户。 增加tom用户,密码为tom,可在任何主机登录: create user 'tom'@localhost identified by 'tom'; create user 'tom1'@'192.168.1.%' identified by 'tom1'; 4、管理数据库 显示数据库 show databases; 注:数据库乱码问题 修改/etc/my.cnf配置文件:character-set-server=utf8 Java连接mysql的配置文件中: jdbc:mysql://localhost:3306/test?useUnicode=true