mysql创建索引

PHP程序员福利“看免费直播,学MySQL索引优化”

十年热恋 提交于 2020-02-27 19:28:39
MySQL是目前所知PHP最流行的关系型数据库管理系统之一,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。之所以它会成为主流使用数据库,这一切要归功于速度快、成本低、开放源码等优势,所以一般中小型网站的开发都选择 MySQL 作为网站数据库。 我们常见的数据库性能提升常用方案就是索引,但索引查询并不等于创建就完事,在使用过还需要提高索引命中率、优化索引等手段来达到优化的目的。这也是我们接下来所要讲解的重点,如何更为精通掌握使用MySQL?如何在利用索引查询手段时更加优化?只有彻底理解此内容,才能帮助我们在PHP进阶路上更进一步,达到中高级程序员水平。 在优化的过程中,我们需要注意一些事项:索引用在where条件经常使用的列; 加索引列的内容不是唯一的几个值; 加索引列的内容不要频繁变化; 加索引列的值可以为null,并且可以有多null ,但不能存有重复的空字符串" "; 对于创建多个列索引,如果不是一起使用的话,则查询时使用索引会不起作用,如 (创建索引A ,B 查询只查询了A );模糊查询时 使用like 前面有百分号开头索引会失效;如果条件中or ,那么条件中带索引会失效,就是说必须作为条件的所有字段都必须带索引 ,建议不要使用or关键字;如果列类型是字符串,哪作为条件查询时该列的值一定用‘ ’引号引用起来,否则索引失效。

MySQL的视图、事务和索引

陌路散爱 提交于 2020-02-27 05:02:56
视图 1. 为什么要有视图 对于复杂的查询,往往是有多个数据表进行关联查询而得到,如果数据库因为需求等原因发生了改变,为了保证查询出来的数据与之前相同,则需要在多个地方进行修改,维护起来非常麻烦 解决办法:定义视图 2. 视图是什么 通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。 视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变); 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性; 3. 定义视图 建议以v_开头 create view 视图名称 as select语句; 4. 查看视图 查看表会将所有的视图也列出来 show tables; 5. 使用视图 视图的用途就是查询 select * from v_stu_score; 6. 删除视图 drop view 视图名称; 例: drop view v_stu_sco; 8. 视图的作用 提高了重用性,就像一个函数 对数据库重构,却不影响程序的运行 提高了安全性能,可以对不同的用户 让数据更加清晰 事务 1. 为什么要有事务 事务广泛的运用于订单系统、银行系统等多种场景 例如: A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事: 检查A的账户余额

MySQL之数据库优化

人走茶凉 提交于 2020-02-27 04:39:10
Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包括 •表的设计合理化(符合3NF) •添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] •分表技术(水平分割、垂直分割) •读写[写: update/delete/add]分离 •存储过程 [模块化编程,可以提高速度] •对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] •mysql服务器硬件升级 •定时的去清除不需要的数据,定时进行碎片整理(MyISAM) 数据库优化工作 对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说,要保证数据库的效率,要做好以下四个方面的工作: ① 数据库设计 ② sql语句优化 ③ 数据库参数配置 ④ 恰当的硬件资源和操作系统 此外,使用适当的存储过程,也能提升性能。 这个顺序也表现了这四个工作对性能影响的大小 数据库表设计 通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通 俗地理解是够用的理解,并不是最科学最准确的理解): 第一范式:1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF) 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

SQL进阶(1)——MySQL元数据与索引

混江龙づ霸主 提交于 2020-02-26 23:11:09
文章目录 1.mysql元数据 获取服务器元数据 2.mysql函数 2.1 常用的字符串函数 2.2 数字函数 2.3 日期函数 2.4 高级函数 3.MySQL索引 3.1 普通索引 3.1.1 创建索引 3.1.2 修改表结构(添加索引) 3.1.3 创建表的时候直接指定 3.1.3 删除索引的语法 3.2 唯一索引 3.2.1 创建索引 3.2.2 修改表结构 3.2.3 创建表的时候直接指定 3.3 使用ALTER 命令添加和删除索引 3.4 使用 ALTER 命令添加和删除主键 3.5 显示索引信息 4.MySQL 事务 4.1、事务控制语句: 4.2、MYSQL 事务处理主要有两种方法: 1.mysql元数据 你可能想知道MySQL以下三种信息: 查询结果信息: SELECT, UPDATE 或 DELETE语句影响的记录数。 数据库和数据表的信息: 包含了数据库及数据表的结构信息。 MySQL服务器信息: 包含了数据库服务器的当前状态,版本号等。 在MySQL的命令提示符中,我们可以很容易的获取以上服务器信息。 获取服务器元数据 以下命令语句可以在 MySQL 的命令提示符使用,也可以在脚本中 使用,如PHP脚本。 命令 描述 SELECT VERSION( ) 服务器版本信息 SELECT DATABASE( ) 当前数据库名 (或者返回空) SELECT

带你使用Elasticsearch中提供的Rest风格API, 快来快来, 不要错过哦~~

核能气质少年 提交于 2020-02-26 19:15:34
Rest风格API elasticsearch提供了Rest风格的API,即http请求接口 1. 基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。 索引(indices) Databases数据库 类型(type) Table数据库 文档(Document) Row行 字段(Field) Columns 索引库(indices):indices是index的复数,代表许多的索引 类型(type):类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念。 文档(document):存入索引库原始的数据。比如每一条商品信息,就是一个文档。 字段(field):文档中的属性。 映射配置(mappings):字段的数据类型、属性、是否索引、是否存储等特性。 2. 索引操作 2.1 创建索引:put请求 kibana的安装使用看这个博客: elasticsearch入门(IKibana安装) 使用kibana创建索引: 请求方式:PUT 请求路径:索引库名 请求参数:json格式 put book { "settings":{ "number_of_shards":1, /*分片数量*/ "number_of

MySQL 执行计划中Extra(Using where,Using index,Using index condition,Using index,Using where)的浅析

北战南征 提交于 2020-02-26 06:49:57
关于如何理解MySQL执行计划中Extra列的Using where、Using Index、Using index condition,Using index,Using where这四者的区别。首先,我们来看看官方文档关于三者的简单介绍(官方文档并没有介绍Using index,Using where这种情况): Using index (JSON property: using_index) The column information is retrieved from the table using only information in the index tree without having to do an additional seek to read the actual row. This strategy can be used when the query uses only columns that are part of a single index. For InnoDB tables that have a user-defined clustered index, that index can be used even when Using index is absent from the Extra column. This is the

mysql优化之索引篇

泪湿孤枕 提交于 2020-02-26 05:28:39
对mysql优化是一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] c: 分表技术(水平分割、垂直分割) d: 读写[写: update/delete/add]分离 e: 存储过程 [模块化编程,可以提高速度] f: 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM) i: sql语句优化 本篇主要总结下索引有关内容 索引 四种索引(主键索引/唯一索引/全文索引/普通索引) CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name (index_col_name,...) index_col_name: col_name [(length)] [ASC | DESC] (列部分值作为索引) 列部分值作为索引:: 对于CHAR和VARCHAR列,只用一列的一部分就可创建索引。 创建索引时,使用col_name(length)语法,对前缀编制索引。 前缀包括每列值的前length个字符。 BLOB和TEXT列也可以编制索引,但是必须给出前缀长度。

从原理到优化,深入浅出数据库索引

爷,独闯天下 提交于 2020-02-26 02:08:32
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 数据库查询是数据库的最主要功能之一,我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化,这篇文章对索引做一个系统的梳理,希望对大家有帮助。 一、MySQL有哪些索引类型 索引的分类可以从多个角度进行,下面分别从数据结构,物理存储和业务逻辑三个维度进行划分。 1、从数据结构角度 (1)B+树索引(O(log(n))) 关于B+树索引,后面会深入解析 (2)hash索引 仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询 其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引 只有Memory存储引擎显示支持hash索引 (3)FULLTEXT索引 现在MyISAM和InnoDB引擎都支持了 (4)R-Tree索引 用于对GIS数据类型创建SPATIAL索引 2、从物理存储角度 (1)聚集索引(clustered index) 正文内容按照一个特定维度排序存储,这个特定的维度就是聚集索引; Innodb存储引擎中行记录就是按照聚集索引维度顺序存储的,Innodb的表也称为索引表;因为行记录只能按照一个维度进行排序

应有尽有的MySQL 的覆盖索引与回表

我怕爱的太早我们不能终老 提交于 2020-02-25 16:11:03
两大类索引 使用的存储引擎:MySQL5.7 InnoDB 聚簇索引 * 如果表设置了主键,则主键就是聚簇索引 * 如果表没有主键,则会默认第一个NOT NULL,且唯一(UNIQUE)的列作为聚簇索引 * 以上都没有,则会默认创建一个隐藏的row_id作为聚簇索引 由此可见,使用聚簇索引查询会很快,因为可以直接定位到行记录。 普通索引 InnoDB的普通索引叶子节点存储的是主键(聚簇索引)的值,而MyISAM的普通索引存储的是记录指针。 示例 建表 mysql> create table user( -> id int( 10 ) auto_increment, -> name varchar( 30 ), -> age tinyint( 4 ), -> primary key ( id ), -> index idx_age ( age ) -> )engine=innodb charset=utf8mb4 ; id 字段是聚簇索引,age 字段是普通索引(二级索引) 填充数据 insert into user(name,age) values( '张三' , 30 ); insert into user(name,age) values( '李四' , 20 ); insert into user(name,age) values( '王五' , 40 ); insert

Python与Redis交互

淺唱寂寞╮ 提交于 2020-02-25 16:01:22
缓存系统 mongodb 直接持久化,宕机数据不丢失 redis 半持久化,手动控制,NoSQL数据库 memcache 不能持久化,存储在内存中,轻量级缓存 radis 单线程应用,通过异步实现多访存 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多, 包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。 在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。 区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis的安装 1 wget http://download.redis.io/releases/redis-3.0.6.tar.gz 2 tar xzf redis-3.0.6.tar.gz 3 cd redis-3.0.6 4 make 启动Radis 1 src/redis-server 客户端操作 1 src/redis-cli 2 redis> set name cq