mysql创建索引

Mysql 索引

不羁的心 提交于 2019-12-26 05:17:07
Mysql 索引介绍   MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。   打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。 索引分单列索引和组合索引: 单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。 组合索引,即一个索包含多个列。 注:创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 注:实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。 注:索引提高数据查找速度使用B+树算法查找,与hash差不多,数据被加入索引后会转为一串数字进行排列,上亿数据可同过几次查找并取出。 注:一个表中的主键就是一种索引。 注:唯一索引,索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。 因此索引也会有它的缺点: 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。 因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间的索引文件。 它有以下几种创建方式: # 查看表中的索引 mysql> show index from 表名\G *********************

Mysql 表类型

天大地大妈咪最大 提交于 2019-12-26 03:46:00
MySQL为我们提供了很多表类型供选择,有MyISAM、ISAM、HEAP、BerkeleyDB、InnoDB,MERGE表类型, 萝卜白菜各有所爱是不假,可是真正选择何种表类型还是要看业务需要啊 ,每一种表类型都有其自己的属性和优点。下面我们来简单的讨论一下。 MyISAM表类型: MyISAM表(TYPE=MYISAM)是ISAM类型的一种延伸,具有很多优化和增强的特性。 是MySQL的默认表类型。 MyISAM优化了压缩比例和速度,并且可以很方便的在不同的操作系统和平台之间进行移植。 MyISAM支持大表文件(大于4G) 允许对BLOB和TEXT列进行索引 支持使用键前缀和使用完整的键搜索记录 表数据和表索引文件可以依存在不同的位置,甚至是不同的文件系统中。 即使是具有相当多的插入、更新和删除操作的表,智能防碎片逻辑也能保证其高性能的协作性。 ISAM表类型: ISAM表(TYPE=ISAM)和MyISAM表相似,但是其没有MyISAM格式的很多增强性能,因而不能像MyISAM类型那样提供很好的优化和执行效率。因为 ISAM索引不能被压缩 ,它比在MyISAM中的相同索引战胜较少的系统资源。 ISAM索引需要较多的磁盘空间 ,这对于像本站的这种小型环境很是问题。呵呵。 和MyISAM一样,ISAM表可以是固定长度的,也可以是可变长度的,但是其格式的最大键长度比较小,

Mysql 索引

偶尔善良 提交于 2019-12-26 00:25:49
原文: mysql索引详解 一. 索引的定义    索引用于快速找出在某个列中有一特定值的行   不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,   如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。   MySQL中的索引的 存储类型 有两种: B+TREE 、 HASH 。 二. 优缺点 1. 优点 所有的MySql列类型(字段类型)都可以被索引,也就是可以给 任意字段设置索引 提高数据的 查询速度 2. 缺点 创建索引和维护索引要 耗费时间 ,并且随着数据量的增加所耗费的时间也会增加 索引也需要 占用空间 ,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值 当对表中的数据进行增加、删除、修改时,索引也需要 动态维护 ,降低了数据的维护速度。 3. 使用原则 对 经常更新的表 就 减少索引 的设置,对 经常用于查询的字段 应该 创建索引 , 数据量小 的表最好 不要使用索引 ,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。 在 相同值多 的列上(字段上) 不要建立索引 ,比如在学生表的"性别"字段上只有男,女两个不同值。相反的

一个MySQL视图的优化过程

人走茶凉 提交于 2019-12-25 13:04:58
1. 需要优化的sql 最近做一个基于.net mvc和MySQL的仓储系统的优化工作,遇到了一个执行特别慢的SQL语句,经过一番折腾,终于搞定啦,分享一下过程。问题就是下面这个家伙: create or replace view view_task_meter_info as select t1.TASK_ID,t1.task_no,t1.BINDBOX_BARCODE as box_barcode,t1.EQUIP_BAR_CODE,t1.METER_STATUS,t1.ENTITY_TYPE as RSLT_CODE, -- 设备类别 (SELECT name from data_dictionary_info t01 where t01.domain ='设备类别' and t01.code = t3.EQUIP_CATEG) as T_Equip_categ, -- 类别 (select name from data_dictionary_info t09 where t09.domain = '类型' and t09.code = t3.TYPE_CODE) as T_TYPE_CODE, -- 类型 (select name from data_dictionary_info t09 where t09.domain = '类别' and t09.code = t3

Mysql 常用操作

瘦欲@ 提交于 2019-12-25 10:36:08
一、mysql 5.7修改root密码 如果 MySQL 正在运行 首先杀之: killall -TERM mysqld。 运行 mysqld_safe --skip-grant-tables & 如果此时不想被远程连接: mysqld_safe --skip-grant-tables --skip-networking & 使用mysql连接server mysql 更改密码 update mysql.user set authentication_string=password('1122qqWW') where user='root' and Host = 'localhost'; 特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了 而是将加密后的用户密码存储于authentication_string字段 mysql> flush privileges; mysql> quit; 修改完毕。重启 killall -TERM mysqld service mysql start 二、创建用户 创建一个只能在本机登陆的用户 create user '用户名'@'localhost' identified by '用户的密码'; 创建一个只能由特定远程主机使用的帐户 create user '用户名'@'远程IP地址' identified

MySQL实用基本操作

淺唱寂寞╮ 提交于 2019-12-25 10:33:41
本博客写是装好Mysql并配好环境变量后的基本操作(windows10系统下)且都是黑框内的操作。 一、登陆MySQL 首先启动服务,在桌面左下角图标处点击右键Windows PowerShell(管理员)(A),然后会出来个蓝框,在蓝框内输入 net start mysql80 (80是对应的MySQL版本如果是其他版本则输入对应的版本号,如5.7版本输入net start mysql57),然后按回车键,若显示服务已启动,则服务启动成功。 在搜索框内输入cmd则会弹出命令提示符点击进去,所谓的黑框就弹了出来,黑框不一定是黑的,可以通过右键点击左上角改变其属性,接着在黑眶内输入 mysql -u root -p ,按回车键,输入你的密码,敲回车,登陆成功进入MYSQL。 二、对数据库的操作 (1)查看数据库: show databases; (2)创建数据库: create database 数据库名; (3)使用数据库: use 数据库名; (4)删除数据库: drop database 数据库名; 部分实例 三、对表的操作 (1)创建数据表 : create table 数据表名 ( 属性1 类型, 属性2 类型,); 类型后边可以加限定条件:primary key(主键)、not null(不能为空)、unique(唯一的)、foreign key(外键)、default

MySQL常用命令

感情迁移 提交于 2019-12-25 10:32:58
常用SQL语句   我将由外到里进行编写(数据库到表再到数据)   库层:   1、SHOW DATABASES;   2、CREATE DATABASE dbname;   3、DROP DABABASE dbname;   4、ALTER DATABASE dbname set=新字符集 collate=新校对集;   5、USE dbname;   6、SHOW CREATE DATABASE dbname;   表层:   1、创建表形式:   CREATE TABLE tabname   (    字段名1,数据类型 [列级别约束条件] [默认值],      字段名1,数据类型 [列级别约束条件] [默认值],      …     [表级别约束条件]   );    a、使用主键约束PRIMARY KEY    两个地方添加:1、列约束条件位置(PRIMARY KEY) 2、表级别约束条件位置([CONSTRAINT <约束名>] PRIMARY KEY [字段名])    b、使用唯一性约束UNIQUE    同上两个地方添加:1、UNIQUE 2、[CONSTRAINT <约束名>] UNIQUE(<字段名>)    与主键的区别,两者同样要求唯一,但是UNIQUE可以是NULL,主键不可以。且一个表中PRIMARY KEY只能是一个,UNIQUE可以存在多个。

查找Mysql慢查询Sql语句

流过昼夜 提交于 2019-12-24 23:36:26
一、MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log 这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。 2,long_query_time 当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。 3,slow_query_log_file 记录日志的文件名。 4,log_queries_not_using_indexes 这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。 二、检测mysql中sql语句的效率的方法 1、通过查询日志 (1)、Windows下开启MySQL慢查询 MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上 代码如下 log-slow-queries = F:/MySQL/log/mysqlslowquery。log long_query_time = 2 (2)、Linux下启用MySQL慢查询 MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上 代码如下 log-slow-queries=/data/mysqldata/slowquery。log long_query_time=2 说明 log-slow-queries = F:/MySQL/log

mysql数据库优化

折月煮酒 提交于 2019-12-24 17:48:08
前言 数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷. 1. 优化一览图 2. 优化 笔者将优化分为了两大类,软优化和硬优化,软优化一般是操作数据库即可,而硬优化则是操作服务器硬件及参数设置. 2.1 软优化 2.1.1 查询语句优化 1.首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息. 2.例: DESC SELECT * FROM `user` 显示: 其中会显示索引和查询数据读取数据条数等信息. 2.1.2 优化子查询 在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高. 2.1.3 使用索引 索引是提高数据库查询速度最重要的方法之一,关于索引可以参高笔者<MySQL数据库索引>一文,介绍比较详细,此处记录使用索引的三大注意事项: LIKE关键字匹配'%'开头的字符串,不会使用索引. OR关键字的两个字段必须都是用了索引,该查询才会使用索引. 使用多列索引必须满足最左匹配. 2.1.4 分解表 对于字段较多的表,如果某些字段使用频率较低,此时应当

数据库的几个概念:主键,外键,索引,唯一索引

蓝咒 提交于 2019-12-24 05:57:59
主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment ;自增长的类型 ; 外键: 定义数据表   假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。   在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;   在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。   很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。   首先我们来创建 parts 表: CREATE TABLE parts ( ... 字段定义 ..., model VARCHAR(20) NOT NULL, ... 字段定义 ... );   接下来是Pc表: CREATE TABLE pc ( ... 字段定义 ..., cpumodel VARCHAR(20) NOT NULL, ...