mysql创建索引

Mysql查询效率优化

不羁的心 提交于 2019-12-07 07:06:43
本篇文章是对MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍,需要的朋友参考下 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 也要慎用,否则会导致全表扫描,如: select id

Mysql数据库调优

╄→гoц情女王★ 提交于 2019-12-07 01:55:05
1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响。MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此在产品中使用MySQL数据库必须进行必要的优化。 优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化。 2. 数据库设计和查询优化 在MySQL Server性能调优中,首先要考虑的就是Database Schema设计,这一点是非常重要的。一个糟糕的Schema设计即使在性能调优的MySQL Server上运行,也会表现出很差的性能;和Schema相似,查询语句的设计也会影响MySQL的性能,应该避免写出低效的SQL查询。这一节将详细讨论这两方面的优化。 2.1 Schema Design Schema的优化取决于将要运行什么样的query,不同的query会有不同的Schema优化方案。2.2节将介绍Query Design的优化。Schema设计同样受到预期数据集大小的影响。Schema设计时主要考虑:标准化,数据类型,索引。 2.1.1 标准化 标准化是在数据库中组织数据的过程。其中包括,根据设计规则创建表并在这些表间建立关系;通过取消冗余度与不一致相关性,该设计规则可以同时保护数据并提高数据的灵活性

数据库结构

假如想象 提交于 2019-12-07 00:29:25
数据库基本结构 SQL数据库(关系型) 1.收费 2.开源免费 NOSQL数据库(非关系型) LAMP环境 数据库基本结构 1.数据库服务器: 2.数据表: 3.表引擎(Mysql为例): 4.Mysql 基本命令 5.数据库操作: 6.表操作: 7.表数据操作: 8.表索引: 索引作用: 1.普通索引: 2.唯一索引: 3.主键索引: 9.数据库基本操作: 1.表名的反引号作用: 2.修改数据表字段: 1.增 2.删 3.改 SQL数据库(关系型) 1.收费 1.DB2 2.Sqlserver 3.Oracle 2.开源免费 1.Mysql 2.Sqlite(所有语言默认支持的数据库,数据库小) 3.Postgresql(Linux) NOSQL数据库(非关系型) 非关系数据库是为了弥补关系型数据库而诞生的。 1.MongoDB 2.Redis 3.Memcache LAMP环境 1.Linux 2.Apache 3.Mysql 4.PHP 5.js+node.js+mongodb 数据库基本结构 1.数据库服务器: 1.数据库 2.数据表 2.数据表: 1.表结构(字段) 2.表数据(记录) 3.表索引(加快检索) 3.表引擎(Mysql为例): 1.myisam(3个文件) 2.innodb(2个文件,还有一个文件(这个文件只有一部分)) 4.Mysql 基本命令 1

mysql查询表索引

非 Y 不嫁゛ 提交于 2019-12-06 22:39:02
本文转自夏日博客 https://www.xiariboke.com/article/4061.html MySQL查询表索引命令的有两种命令形式,代码如下: mysql> SHOW index FROM `tblname`; 或者: mysql> SHOW keys FROM `tblname`; 运行以上命令得到的结果,下面将将所得的结果中每列的意思做一下说明. Table 表的名称。 Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1。 Key_name 索引的名称。 Seq_in_index 索引中的列序列号,从1开始。 Column_name 列名称。 Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。 Cardinality 索引中唯一值的数目的估计值,通过运行ANALYZE TABLE或myisamchk -a可以更新,基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的,基数越大,当进行联合时,MySQL使用该索引的机会就越大. Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目,如果整列被编入索引,则为NULL. Packed 指示关键字如何被压缩,如果没有被压缩,则为NULL. Null 如果列含有NULL,则含有YES,如果没有

mysql 查询指定数据库所有表, 指定表所有列, 指定列所有表 所有外键及索引, 以及索引的创建和删除

送分小仙女□ 提交于 2019-12-06 22:34:48
查询指定 数据库 中所有 表 (指定数据库的,所有表) // 可以把 TABLE_NAME 换成 * 号, 查看更丰富的信息 SELECT TABLE_NAME FROM information_schema. TABLES WHERE table_schema = '数据库名' // where 后面还有更多的条件选择,比如只查出以 oauth_表开头的表 AND TABLE_NAME LIKE 'oauth_%' ; 查询指定 数据库 中,指定 表 的所有 字段 (指定表的,所有列) SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE table_schema = '数据库名' AND table_name = '表名' 查询指定 数据库 所有表中, 含有 某个字段 的表 (指定列的,所有表) SELECT table_name FROM information_schema. COLUMNS WHERE table_schema = '数据库名' AND table_name in ( SELECT TABLE_NAME FROM information_schema. TABLES WHERE table_schema = '数据库名' ) AND COLUMN_NAME = '字段名' ; 查询指定 数据库

Mysql 索引心得

六眼飞鱼酱① 提交于 2019-12-06 17:27:50
1、 频繁查询的字段,应该创建索引。 2、更新非常频繁的字段,不应该创建索引。 3、唯一性太差的字段,比如 gender字段,就不应该创建索引。 4、不会出现在where条件之后的字段,不应该创建索引。 满足一下条件,应该创建索引: 1、频繁要查询的字段,经常出现在where条件后面的字段,应该创建索引。 2、更新不频繁的字段,可以创建索引。 索引使用的注意事项 1.对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。 比如我们对title,content 添加了复合索引 select * from table_name where title = 'test';会用到索引 select * from table_name where content = 'test';不会用到索引 2.对于使用like的查询,查询如果是 ‘%a'不会使用到索引 ,而 like 'a%'就会用到索引。最前面不能使用%和_这样的变化值 3.如果条件中有or,即使其中有条件带索引也不会使用。 4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。 查看索引的使用情况:show status like‘Handler_read%'; handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。 handler_read_rnd_next:这个值越高

MySQL批量SQL插入性能优化

只谈情不闲聊 提交于 2019-12-06 14:47:21
对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。 经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。 1. 一条SQL语句插入多条数据。 常用的插入语句如: MySQL INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1); 1 2 3 4 INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1',

mysql之explain

余生长醉 提交于 2019-12-06 14:19:19
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈。 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。 注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。 type列 这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。 依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL 一般来说,得保证查询达到range级别,最好达到ref key列 这一列显示mysql实际采用哪个索引来优化对该表的访问。 如果没有使用索引,则该列是 NULL key_len列 这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了联合索引中的哪些 列。 key_len计算规则如下: 字符串 char(n):n字节长度 varchar(n):可变数据类型.最大n个字符。n字节长度,2字节存储字符串长度,如果是utf-8,则长度 3n + 2 数值类型 tinyint:1字节 smallint:2字节 int:4字节 bigint:8字节  时间类型 date:3字节 timestamp:4字节 datetime:8字节

SQL简介

耗尽温柔 提交于 2019-12-06 13:11:53
1,为什么使用数据库? 作用,对数据进行持久化的操作 2,数据库的存储结构 表格:用于存储的数据结构 3,数据库分类 SQL:适用于所有数据库的增删改查,权限分配的结构化查询(查得多)语言 标准sql oracle:pl-sql:功能扩展,只适用oracle 数据库分类 关系型数据库:oracle,mysql,sqlserver NOSQL:效率高,不用sql: HBase,Redis(存储在内存), 文档存储(MongoDB) 访问方式 dos 主页 客户端 1,备份数据库 mysqldump -u root -p --all-databases>./mysql.sql 备份到当前目录下,带数据备份 2,列操作 添加列:alter table name add(列名,类型 默认值 约束,列名2 类型) 删除列:alter table name drop (zuduan) 修改列名alter table name rename old to new 级联删除表 drop table name cascade constraint 修改列的属性 alter table name modify(列名 类型 默认值....) 删除约束 alter table name drop constraint 约束名;建表时可指定 例:name char constraint1 primary

2016年总结-JAVA程序员

故事扮演 提交于 2019-12-06 11:48:47
一、技术积累 (1)代码规范 1.1.1、通常的模块分布:一般如果你要实现一个web应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集(你调用他的接口,他依赖你的接口),这样下来,整个公司有很多个模块,怎么做到很好的联系。回到刚刚的模块分布,你的一个web应用,应当需要分成三个模块:core模块、service模块、web模块。web模块就是展示到页面,后台代码而言主要就controller层了,其他逻辑基本都放在core了,service模块就是一些接口类和参数dto等等,接口的实现类在core模块。这样下来,web模块只需要依赖service模块,同样的其他系统依赖你的接口也仅仅是依赖service模块,然后利用远程调用方式消费你的接口服务。 1.1.2、代码层级结构:针对后台服务项目,一般分为对外接口层、service层、Dao层。Dao层就是与数据库交接的接口层,service层主要调用Dao或者外部系统的接口,复杂的逻辑基本都放在service层;一些方法需要提供给其他模块调用的时候,就封装在对外接口层,只有对外接口层是暴露。这里说的只是层级结构,还有与层级结构无关的,也是需要归类的,比如对外部系统接口方法封装的我们放在一个目录下面,一些常量和工具类等我们放在common目录下面。当然还有其他考虑,尽量让整个模块有层次感,代码才不会太乱