mysql创建索引

字段约束,索引,主外键

£可爱£侵袭症+ 提交于 2019-12-10 10:27:23
第 二 节 字段约束,索引,主外键 字段约束条件 1.1 作用:限制如何给字段赋值的 1.2 包括内容有: NULL Key Default Extra NULL 是否允许给字段赋 null 值 null 默认允许赋 null 值 not null 不允许赋 null 值 key 键值类型:普通索引唯一索引全文索引主键外键 Default 默认值作用:当不被字段赋值时,使用默认值给字段赋值 不设置默认值是系统定义的是 null default 值 Extra 额外设置,字段是否设置为自动增加 , 默认没有自动增长功能 案例: 1)建库 Mysql>create database db2; 2)进库 use db2; 3)建表 Mysql>create table t2( >name char(3), >level int(3)zerofill ); Mysql>create table t5( >classroom char(7)default"nsd1801", >name char(5)not null, >age tinyint(2)unsigned zerofill default 18, >sex enum("boy","girl")not null default"boy" ); 4) 表里建值 insert into db2.t1 values("bob",1);

Mysql安装、配置、优化

℡╲_俬逩灬. 提交于 2019-12-10 04:43:34
Mysql安装、配置、优化 下载软件包 wget http://test.hexin.cn/software/mysql-5.7.9.tar.gz -P /usr/local/src/ wget http://test.hexin.cn/software/cmake-3.4.0.tar.gz -P /usr/local/src/ wget http://test.hexin.cn/software/boost_1_59_0.tar.gz -P /usr/local/src/ 安装基础软件 yum -y install make gcc-c++ bison-devel ncurses-devel 二、 安装配置MySQL 编译安装cmake tar zxvf /usr/local/src/cmake-3.4.0.tar.gz cd /usr/local/src/cmake-3.4.0 ./configure && make && make install 编译安装boost(编译时不加boost,可以不用安装此软件) tar zxvf /usr/local/src/boost_1_59_0.tar.gz -C /usr/local/boost/ cd /usr/local/boost/ ./bootstrap.sh ./b2 新增用户用户组 groupadd mysql

MySql最左前缀原则

点点圈 提交于 2019-12-10 01:14:33
最左前缀原则 通过实例理解单列索引、多列索引以及最左前缀原则 实例:现在我们想查出满足以下条件的用户id: mysql>SELECT `uid` FROM people WHERE lname`=’Liu’ AND `fname`=’Zhiqun’ AND `age`=26 因为我们不想扫描整表,故考虑用索引。 单列索引: ALTER TABLE people ADD INDEX lname (lname); 将lname列建索引,这样就把范围限制在lname=’Liu’的结果集1上,之后扫描结果集1,产生满足fname=’Zhiqun’的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。 由 于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。 2.多列索引: ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age); 为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。 注:在mysql中执行查询时,只能使用一个索引

MySQL 如何创建索引?怎么优化?

我们两清 提交于 2019-12-09 23:17:32
索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本。MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的。MySQL提供了Explain,用于显示SQL执行的详细信息,可以进行索引的优化。 一、导致SQL执行慢的原因 1.硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。 2.没有索引或者索引失效。(一般在互联网公司,DBA会在半夜把表锁了,重新建立一遍索引,因为当你删除某个数据的时候,索引的树结构就不完整了。所以互联网公司的数据做的是假删除.一是为了做数据分析,二是为了不破坏索引 ) 3.数据过多(分库分表) 4.服务器调优及各个参数设置(调整my.cnf) 二、分析原因时,一定要找切入点 1.先观察,开启慢查询日志,设置相应的阈值(比如超过3秒就是慢SQL),在生产环境跑上个一天过后,看看哪些SQL比较慢。 2.Explain和慢SQL分析。比如SQL语句写的烂,索引没有或失效,关联查询太多(有时候是设计缺陷或者不得以的需求)等等。 3.Show Profile是比Explain更近一步的执行细节,可以查询到执行每一个SQL都干了什么事,这些事分别花了多少秒。 4.找DBA或者运维对MySQL进行服务器的参数调优。 三、什么是索引? MySQL官方对索引的定义为:索引

MySQL Explain优化

淺唱寂寞╮ 提交于 2019-12-09 18:31:03
1.1. EXPLAIN 在MySQL中可以使用EXPLAIN查看SQL执行计划。示例:EXPLAIN SELECT * FROM tb_item 1.2. 结果说明 1.2.1. id SELECT识别符。这是SELECT查询序列号。这个不重要。 1.2.2. select_type 表示SELECT语句的类型。 有以下几种值: 1、 SIMPLE 表示简单查询,其中不包含连接查询和子查询。 2、 PRIMARY 表示主查询,或者是最外面的查询语句。示例:explain select * from (select * from user_t ) as tmp; 3、 UNION 表示连接查询的第2个或后面的查询语句。示例:EXPLAIN SELECT id from user_t UNION select id from role; 4、 DEPENDENT UNION UNION中的第二个或后面的SELECT语句,取决于外面的查询。 5、 UNION RESULT 连接查询的结果。 6、 SUBQUERY 子查询中的第1个SELECT语句。 7、 DEPENDENT SUBQUERY 子查询中的第1个SELECT语句,取决于外面的查询。 8、 DERIVED SELECT(FROM 子句的子查询)。 1.2.3. table 表示查询的表。 1.2.4. type( 重要 )

lucene学习笔记

烂漫一生 提交于 2019-12-09 14:40:45
lucene学习笔记 1.maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>top.simba1949</groupId> <artifactId>lucene</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--核心包--> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>5.3.1</version> </dependency> <!--一般分词器,适用于英文分词--> <dependency> <groupId>org

MySQL优化----索引

喜欢而已 提交于 2019-12-09 10:46:09
一、主键索引 创建主键索引 索引名规范 :ix_表名_字段名 语法: create index 索引名 on 表名(字段名) 查看索引是否创建成功 show index from 表名\G ; 二、全文索引 应用场景: 创建全文索引 #创建全文索引 CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY , title VARCHAR ( 200 ) , body TEXT , FULLTEXT ( title , body ) ) engine = myisam charset = utf8 ; #插入语句 INSERT INTO articles ( title , body ) VALUES ( 'MySQL Tutorial' , 'DBMS stands for DataBase ...' ) , ( 'How To Use MySQL Well' , 'After you went through a ...' ) , ( 'Optimizing MySQL' , 'In this tutorial we well show ...' ) , ( 'MySQL Security' , 'When configured properly,MySQL ...' ) , (

MySQL 处理海量数据时的一些优化查询速度方法

坚强是说给别人听的谎言 提交于 2019-12-08 18:18:08
在参与实际项目中,当 MySQL 表的数据量达到百万级时,普通的 SQL 查询效率呈直线下降,而且如果 where 中的查询条件较多时,其查询速度无法容忍。想想可知,假如我们查询淘宝的一个订单详情,如果查询时间高达几十秒,这么高的查询延时,任何用户都会抓狂。因此如何提高 SQL 语句查询效率,显得十分重要。 查询速度慢的原因 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O 吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。 9、返回了不必要的行和列 10、查询语句不好,没有优化 30 种 SQL 查询语句的优化方法: 1、应尽量避免在 where 子句中使用 != 或者 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: 1 select id from t where num is null ; 可以在 num 上设置默认值 0 ,确保表中 num 列没有 null 值,然后这样查询: 1

MySQL大表优化方案

坚强是说给别人听的谎言 提交于 2019-12-08 18:12:14
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在 千万级 以下,字符串为主的表在 五百万 以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用 TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNED VARCHAR 的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用 TIMESTAMP 而非 DATETIME , 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用 UNIQUE

Mysql 优化之海量数据分析

拈花ヽ惹草 提交于 2019-12-08 18:09:44
现在的信息时代,有大量的数据需要被查询并分析。这里所指的海量数据是至少几百万条甚至上千条的是数据返回。基于Mysql 这类的关系型数据库,查询还可能还涉及多表连查,性能可想而知,要想进行优化,就必须要对网络传输、数据服务器处理时间、CPU性能、索引效率等多方面因素进行一定的分析。从而才能得到真正耗时的症结所在,合理的对症下药,优化Mysql的查询性能。 上一次讲到通过跨列查询导致索引失效,来学习 explain 各个参数。今天是通过存储过程模拟海量数据,来了解profile 对分析海量数据的意义。 1,创建两个表,分别为部门表和员工表 create table dept ( dno int ( 5 ) primary key default 0 , dname varchar ( 20 ) not null default '' , loc varchar ( 30 ) default '' ) ENGINE = INNODB default charset = utf8 create table emp ( eid int ( 5 ) primary key , ename varchar ( 20 ) not null default '' , job varchar ( 20 ) not null default '' , deptno int ( 5 ) not null