mysql索引

数据库30条规范

我的未来我决定 提交于 2020-02-23 15:18:15
一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省空间 (3)数据表、数据字段必须加入中文注释 解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的 (4)禁止使用存储过程、视图、触发器、Event 解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移吧 (5)禁止存储大文件或者大照片 解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存URI多好 二、命名规范 (6)只允许使用内网域名,而不是ip连接数据库 (7)线上环境、开发环境、测试环境数据库内网域名遵循命名规范 业务名称:xxx 线上环境:dj.xxx.db 开发环境:dj.xxx.rdb 测试环境:dj.xxx.tdb 从库 在名称后加-s标识, 备库 在名称后加-ss标识 线上从库:dj.xxx-s.db 线上备库:dj.xxx-sss.db (8)库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用 (9)表名t_xxx

好程序员Web前端教程入门之MySQL命名规范及使用技巧

假如想象 提交于 2020-02-22 19:47:49
  好程序员Web前端教程入门之MySQL命名规范及使用技巧,不懂MySQL的前端不是一个好前端,作为Web应用方面最好的关系数据库管理系统应用软件之一,MySQL体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。接下来的好程序员Web前端课程就给大家简单分享MySQL命名规范及使用技巧。   命名规范 1、库名、表名、字段名必须使用小写字母,并采用下划线分割。 a)MySQL有配置参数lower_case_table_names,不可动态更改,Linux系统默认为0,即库表名以实际情况存储,大小写敏感。如果是1,以小写存储,大小写不敏感。如果是2,以实际情况存储,但以小写比较。 b)如果大小写混合使用,可能存在abc、Abc、ABC等多个表共存,容易导致混乱。 c)字段名显示区分大小写,但实际使⽤用不区分,即不可以建立两个名字一样但大小写不一样的字段。 d)为了统一规范, 库名、表名、字段名使用小写字母。 2、库名、表名、字段名禁止超过32个字符。   库名、表名、字段名支持最多64个字符,但为了统一规范、易于辨识以及减少传输量,禁止超过32个字符。 3、库名、表名、字段名禁止使用MySQL保留字。   当库名、表名、字段名等属性含有保留字时,SQL语句必须用反引号引用属性名称,这将使得SQL语句书写

MySQL 存储引擎

别来无恙 提交于 2020-02-21 23:54:46
存储引擎都是作用在表上的 MyISAM索引文件和数据文件是分离的(非聚集)最终一个表会形成3个文件 例如表名叫 aa,形成的3个文件分别叫aa.frm(存储表的结构信息,就是有哪些字段等信息),aa.MYD(存储数据),aa.MYI(存储索引文件) InnoDB索引实现(聚集) InnoDB的表最终会形成2个文件,bb.frm(存储表的结构信息,就是有哪些字段等信息),bb.idb(索引和数据) 来源: CSDN 作者: softwareDragon 链接: https://blog.csdn.net/qq_33348135/article/details/104435383

索引失效的7种情况

天涯浪子 提交于 2020-02-21 12:31:28
简述 什么时候没用 1.有or必全有索引; 2.复合索引未用左列字段; 3.like以%开头; 4.需要类型转换; 5.where中索引列有运算; 6.where中索引列使用了函数; 7.如果mysql觉得全表扫描更快时(数据少); 什么时没必要用 1.唯一性差; 2.频繁更新的字段不用(更新索引消耗); 3.where中不用的字段; 4.索引使用<>时,效果一般; 详述(转) 索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),例子中user_id无索引 注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 对于复合索引,如果不使用前列,后续列也将无法使用,类电话簿。 like查询是以%开头 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引 where 子句里对索引列上有数学运算,用不上索引 where 子句里对有索引列使用函数,用不上索引 如果mysql估计使用全表扫描要比使用索引快,则不使用索引 比如数据量极少的表 什么情况下不推荐使用索引? 1) 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引 比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级

mysql索引优化

旧巷老猫 提交于 2020-02-21 09:59:31
mysql 大数据分页和索引使用 使用覆盖索引 一个表建立在id,create_time上建立了索引。 如下2个sql语句,执行时间一样。 因为查询字段id被索引覆盖。 select id from order_manage where create_time > '2014-01-01' order by create_time desc limit 100000,10 select a.id from order_manage a inner join ( select id from order_manage where create_time > '2014-01-01' order by create_time desc limit 1000,10) b on a.id = b.id 如下2条sql,使用inner join要快一个数量级。 inner join影响结果集仍然是$start +30,但是数据获取的过程(Sending data状态)发生在索引文件中,而不是数据表文件,这样所需要的系统开销就比前一种普通的查询低一个数量级,而主查询的影响结果集只有30条,几乎无开销。但是切记,这里仍然涉及了太多的影响结果集操作 其实也可以分成2条sql语句来做,第一条使用覆盖索引查询出id,在使用in查询出需要的字段数据。 select * from order_manage

MySql索引要注意的8个事情

試著忘記壹切 提交于 2020-02-21 09:57:44
设计好 MySql 索引 可以让你的数据库查询效率大为提高。设计 MySql 索引 的时候,有一些 问题 需要值得我们 注意 的: 1,创建MySql索引 对于查询占主要的应用来说,索引显得尤为重要。很多时候性能 问题 很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加 索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下 降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。 2,复合索引 比如有一条语句是这样的:select * from users where area=’beijing’ and age=22; 如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效 率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age, salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀 特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

MYSQL索引笔记

做~自己de王妃 提交于 2020-02-20 01:22:44
mysql索引 了解mysql的B+Tree索引需要了解B+Tree的发展由来 二叉数, 我们理想的二叉树是这样的 但在实际过程中可能产生瘸腿二叉树 这样在第二个图中如果查找数字8,我们的查找过程一次是3-》4-》5-》7-》8,查找过程中,查找次数并无减少,没有体现出二叉树的优势,所有变衍生了平衡二叉树 平衡二叉树 平衡二叉树的特性是: 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 平衡二叉树通过 左旋、右旋 的方式保障二叉树的平衡(这里就不过多赘述,如果不懂可以百度一下),即便这种平衡二叉树在数据巨大的时候,他的树的高度也会影响到数据的查询速度,变引衍生了B-Tree B-Tree树 B-Tree树一个节点包括N个值(N>=2),而他得子节点为N+1个 B+Tree B+Tree采用了左闭合区间,它B-Tree还有一个比较多得区别在于B-Tree将值保存在每个节点下,而T+Tree不保存相关数据信息,数据信息只保存指子节点 mysql中索引包括: Myisam引擎(非聚集索引) Innodb引擎(聚集索引) mysql中得两种索引都是用B+Tree结构,两种索引的区别在于,聚集索引是有序的,包括索引有序和数据与索引数据一致,而非聚集索引数据是无序的,索引中只报错数据的磁盘地址。 在建表时不同索引会创建不同文件 Myisam引擎

MySQL常见面试题

删除回忆录丶 提交于 2020-02-19 16:04:55
事务: 1、 什么是事务? 2、 事务的特性(ACID),详细说明各个特性的含义? 3、 并发性一致的问题? 4、 事物的隔离级别? 5、根据事务的隔离级别怎么实现可重复读怎么实现预防不可重复读? 6、幻读发生在哪一级? 7、MySQL如何防止幻读? 8、快照读怎么实现? 9、数据库和缓存如何做读写同步? 索引: 1、 常用索引以及类型? 2、 聚簇索引和非聚簇索引的区别? 3、联合索引和单个索引的区别? 4、 联合索引的最左匹配原则? 5、B+树的原理和优势? 6、 B树和B+树的区别、还有hash索引的区别? 7、B+树非叶子节点只放索引的好处? 8、B+树的深度如何增加? 9、M阶B树最多几个节点,最少几个节点? 10、如果索引值为null,走不走索引? 11、Innon和Mysiam索引区别? 12、select for update 和 select 区别? 13、什么情况下不走索引? 锁: 1、悲观锁和乐观锁了解吗? 2、数据库怎么实现乐观锁? 3、数据库如何加行级锁? SQL注入: 1、从服务端如何防止SQL注入? 慢查询: 1、一张表里数据量大,慢查询怎么办? 2、慢查询如何排查? 3、explain中index和ref区别? 普通问题: 1、如何删除表中的数据? 2、delete和truncate的区别? 3、char、varchar、text的区别? 4

mysql优化随笔一

我与影子孤独终老i 提交于 2020-02-19 00:43:41
优化的两个关键点在于:索引和sql语句 索引: 索引就是数据结构,通过索引可以快速查询到你想要的内容,即是排好序的快速查找数据 索引劣势:索引本身也很大,能提高查询数据速度,相对也会降低更新表的速度,所以如果是频繁更新的字段,不建议建立索引 sql语句: having 和where对比:where对聚合前的数据进行过滤,having对聚合后的数据进行过滤 最左匹配原则:和联合索引有关,因为索引只能用于查找key是否存在(相等),遇到范围查询等就不能进一步匹配,后续将退化为线性查找,所以列的排列顺序决定了可命中索引的列数, 来源: CSDN 作者: 个人存在 链接: https://blog.csdn.net/qq_38240938/article/details/104382616

MongoDB操作基础(索引)

霸气de小男生 提交于 2020-02-17 20:00:55
本节主要讲解下MongoDB的索引使用 **查询find()补充:**条件操作符语法:$type:[key] 可选的 key 值如下: 1: 双精度型(Double) 2: 字符串(String) 3: 对象(Object) 4: 数组(Array) 5: 二进制数据(Binary data) 7: 对象 ID(Object id) 8: 布尔类型(Boolean) 9: 日期(Date) 10: 空(Null) 11: 正则表达式(Regular Expression) 13: JS 代码(Javascript) 14: 符号(Symbol) 15: 有作用域的 JS 代码(JavaScript with scope) 16: 32 位整型数(32-bit integer) 17: 时间戳(Timestamp) 18: 64 位整型数(64-bit integer) -1: 最小值(Min key) 127: 最大值(Max key) > db.zhongrun.find ( { "name" : { $type :2 } } ) 和下边的写法一致: > db.zhongrun.find ( { "name" : { $type : 'string' } } ) limit 和skip用法: 读取指定数量的数据记录 limit()。 范例: > db.zhongrun.find