mysql创建索引

SQL优化

▼魔方 西西 提交于 2019-12-06 10:58:46
sq编写过程:   select dinstinct ..from ..join ..on ..where ..group by ...having ..order by ..limit .. sql解析过程:   from .. on.. join ..where ..group by ....having ...select dinstinct ..order by limit ... 避免索引失效 in可能造成索引失效,避免使用in或将in条件放置最后【where name = 'zs' and age in(23,25)】 复合索引使用顺序和创建顺序一致且不跨列使用(最佳左前缀) 复合索引经量全索引匹配(a、b、c全都用上) 避免在索引上进行操作(计算、函数、类型转换...) 复合索引比避免进行不等式判断(!=、<>)、或null判断(is null、is not null) like经量以常量开头,避免以%开头 避免使用or 多表查询 (数据量)小表驱动大表【where 小表.tid = 大表.tid(左小右大)】 索引建立在经常使用的字段上【左连接给左表加索引,右连接给右边加索引】 优化方法:   1.如果主查询数据量大使用in,如果子查询数据量大使用exists   2.order by优化 using filesort有两种算法:单路排序、双路排序(根据io次数判断

mysql在B-Tree上创建伪哈希索引

守給你的承諾、 提交于 2019-12-06 10:46:20
构建哈希的过程 select过程 长字符串下,构建索引可通过自定义哈希作为索引,本人通过实验,在3百多个数据记录的下,性能效果很明显,完全不是一个等级.以下为索引前后几种情况对比 无索引的url:直接通过无索引url 通过构建url的哈希索引:用bigint类型存储索引字段crc_url 在哈希索引下,几乎都是0秒完成. 当然,如果直接使用url作为索引,即用B-Tree存储url存储的内容会很大. 题外话: 在where字句中,优化器会根据查询条件是否存在索引,优先进行索引查询. 如下为例子: 将无索引的url放在前面,跟放在后面,效果是一样的 来源: https://www.cnblogs.com/listened/p/11978829.html

mysql 监控及优化——转载自http://www.cnblogs.com/suansuan/

自作多情 提交于 2019-12-06 09:59:05
1、Mysql连接数   Mysql默认最大连接数为100。   设置Mysql的最大连接数,在Mysql的配置文件中增加:   max_connections = 1000               #Mysql的最大连接数,默认如果不写的话是100个   wait_timeout = 10               #超时时间   配置文件路径:    (/etc/my.cnf 系统自带) (/opt/lampp/etc/my.cnf 安装Mysql 路径)   查看当前有多少个连接   show status like '%Threads_connected%';  #查看当前连接数   show processlist;            #也可查看锁表 2、Mysql缓存   Query Cache缓存的是sql语句对应的结果集,InnoDB_Buffer_Pool中缓存的是表中的数据。Buffer_Pool是设置的越大越好,一般设置为服务器物理内存的70%。   缓存1(MySQL层):查询缓存 Query Cache     ①.查询表里的数据有变化,之前的缓存失效。     ②.查询语句必须一模一样,才能用查询缓存;只要字符大小写或者注释等有一点点不同,都不可以用查询缓存。     ③.任何一个包含不确定的函数(比如now(),current_date()

数据库入门

≯℡__Kan透↙ 提交于 2019-12-06 09:45:20
知识点 △用数据库的原因 1文件操作的复杂度 2同步 3并发处理 4安全 △数据库系统(DBS) 数据库(DB) + 数据库管理系统 (DBS)+ 数据库应用程序 + 数据库管理员 (BDA)+ 最终用户 △数据库管理系统-DBM 网络应用服务端 我们要使用服务端的数据 - 需要有一个客户端 客户端可以自己写 : 未来写代码的时候 也可以用别人写好的 : 第三方的工具 数据库管理软件的公司出版的官方客户端 数据库管理系统本质上也是管理一堆文件 只不过人家的管理方式比我们更高效 更安全 △数据库管理员-DBA 搭建数据库服务环境 用户的创建 权限的管理 性能\语句的优化 数据库的二次开发 : 让数据库具有公司的特质 △软件 mysql : 小公司 甲骨文 oracle : 事业单位 金融企业 微软 sql server sqllite △数据库的分类 关系型数据库 mysql oracle sqlserver sqllite 非关系型数据库 redis mongodb memcache hbase 关系型数据库 优点: 1、易于维护:都是使用表结构,格式一致 2、使用方便:SQL语言通用,可用于复杂查询 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询 缺点: 1、读写性能比较差,尤其是海量数据的高效率读写 2、固定的表结构,灵活度稍欠 3、高并发读写需求

mysql的约束、索引、范式

点点圈 提交于 2019-12-06 08:38:08
约束 表或列的primary key,unique,not null等修饰符常常被称作约束(constraint) 主要作用:是数据库用来提高数据质量和保证数据完整性的一套机制,是表定义(DDL语句)的一部分 约束主要包括: 非空约束 (not null) 唯一性约束 (unique) 主键约束 (primary key) 外键约束 (foreign key) 约束的定义方式 创建表时定义 列级别定义 表级别定义 修改表时进行追加定义 约束的查看 使用desc查看列属性查看约束 使用show create 命令查看 使用show index命令查看(无法查看not null 约束) 非空约束(not null) 用于确保其所在列的值不能为空值null,允许有多个列设置非空约束 只有列级定义和追加定义 列级定义 追加定义 非空约束的删除(将其改回为null) 或 惟一约束(unique) 列字段中不允许有重复值,但是可以有空值,允许有多个列设置惟一约束 也被称为惟一索引(其他数据库管理系统略有不同) 列级定义 表级定义 追加定义 删除惟一约束 主键约束(primary key) 主键列中不允许有重复值,也不可以有空值 一个表中只能有一个主键约束,但一个主键约束可以包含多个列 定义主键时会同时为主键创建唯一性索引 列级定义 表级定义 追加定义 删除主键约束 外键约束(foreign

MySql 索引设计原则

≯℡__Kan透↙ 提交于 2019-12-06 08:38:03
索引的优点 1.加快数据的检索速度,这是创建索引的最主要的原因; 2.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性; 3.加速表和表之间的连接; 4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。 索引的缺点 1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 3.当对表中的数据进行增加、删除和修改的时候,索引也要同步动态的维护,这样就降低了数据的增删改速度。 所以单表数据太少,索引反而会影响速度;更新非常频繁的数据不适宜建索引 索引设计原则 根据数据库的功能,可以在数据库设计器中创建三种索引 唯一索引:唯一索引是不允许其中任何两行具有相同索引值的索引 主键索引:表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时, 它允许对数据的快速访问 聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表 只能包含一个聚集索引 选择索引的最终目的是为了使查询的速度变快。下面给出的原则是最基本的准则,但不能拘泥于这些准则,应该根据应用的实际情况进行分析和判断,选择最合适的索引方式。 1.索引最左匹配原则 索引可以简单如一个列(a)

第一章 mysql架构和历史

房东的猫 提交于 2019-12-06 07:44:53
1.1 mysql逻辑架构 客户端 连接/线程处理 查询缓存——解析器 优化器 存储引擎 1.1.1 连接管理与安全性 每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只有在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。服务器会负责缓存线程,因此不需要为每一个新建的连接创建或销毁线程。 当客户端(应用)连接到mysql服务器时,服务器需要对其进行认证。认证基于用户名、原始主机信息和密码。 1.1.2 优化与执行 优化器会请求存储引擎提供容量或某个具体操作的开销信息,以及表数据的统计信息等。 对于select查询语句,在解析查询之前,服务器会先检查查询缓存(Query Cache),如果能够在其中找到对应的查询,服务器就不必再执行查询解析、优化和执行的过程,而是直接返回查询缓存中的结果集。 1.2 并发控制 1.2.1 读写锁 共享锁(shared lock)和排他锁(exclusive lock),也叫读锁(read lock)和写锁(write lock)。 1.2.2锁粒度 一种提高共享资源并发性的方式就是让锁定对象更有选择性。尽量只锁定需要修改的部分数据,而不是所有的资源。更理想的方式是,只对会修改的数据片进行精确的锁定。任何时候,在给定的资源上,锁定的数据量越少,则系统的并发程度越高,只要相互之间不发生冲突即可。 问题是加锁也需要消耗资源

Mysql创建索引

偶尔善良 提交于 2019-12-06 05:42:28
创建索引 alter table tbl_name add primary key (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为 null。 alter table tbl_name add unique index_name (column_list): 这条语句创建索引的值必须是唯一的(除了 null 外,null 可能会出现多次)。 alter table tbl_name add index index_name (column_list): 添加普通索引,索引值可出现多次。 alter table tbl_name add fulltext index_name (column_list): 该语句指定了索引为 fulltext ,用于全文索引。 删除索引 drop index [indexname] on mytable; 修改 alter mytable add index [indexname] on(username(length)) 查询 使用 show index 命令来列出表中的相关的索引信息。可以通过添加 \g 来格式化输出信息。 show index from table_name \g 来源: https://www.cnblogs.com/yoyotl/p/11964466.html

Mysql Explain学习笔记

那年仲夏 提交于 2019-12-06 02:28:01
Mysql Explain学习笔记 1、Mysql版本 mysql> select version(); +------------+ | version() | +------------+ | 5.7.24-log | +------------+ 1 row in set (0.06 sec) 2、建表 create table student( stu_id bigint primary key auto_increment, stu_name varchar(20), stu_age int(10), course_id int(10) ) create table course( course_id int(10) primary key, course_name varchar(50) ) 3、插入数据 insert into student(stu_name,stu_age,course_id) values("zhangsan",20,1); insert into student(stu_name,stu_age,course_id) values("lisi",21,2); insert into student(stu_name,stu_age,course_id) values("wangwu",22,3); insert into student(stu

python-redis

江枫思渺然 提交于 2019-12-05 23:57:27
一、简介 二、redis的安装和使用 三、python操作redis之安装和支持存储类型 四、python操作redis连接:   普通连接   连接池 五、操作之String操作: 六、操作之Hash操作: 七、操作之list操作: 八、操作之set操作: 九、管道: 十、django中使用redis 一、简介 redis是一个key-value存储系统。和Memcached类似,它支持存储value类型相对更多,   包括string(字符串)、       list(列表)、       set(集合)、       zset(sorted set --有序集合)       hash(哈希类型) 这些数据类型都支持push/pop/add/remove及取交集和差集以及更加丰富的操作,这些操作都是原子性的。在这基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中的。区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-salve(主从)同步 1、使用redis的好处   1、速度快,数据存放到内存中,存放的数据都是key-value形式的无关联数据,查找时间更快  2、支持丰富分数据类型,string,list,set,sorted set,hash   3