mysql索引优化 mysiam和innodb区别?

Mysql中有哪几种锁?

1.表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

2.行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

3.页面锁:开销和加锁时尚界于表锁和行锁之间,并发度一般。

mysql中有哪些不同的表格? 5种

myisam、Heap、merge、innodb、isam

MYISAM和Innodb区别

myisam表引擎:

1.  5.1版本前,myisam是默认的存储引擎。

2. 支持全文索引,压缩空间函数。

3.不支持事务,但是每次查询都是原子的;不支持行锁,不支持外键,不支持崩溃后的安全恢复;

4.支持表锁,即每次操作是对整个表加锁;

5.每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。

6.用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。也可以通过lock table命令来锁表,这样操作主要是可以模仿事务,但是消耗非常大,一般只在实验演示中使用。

7.存储表的总行数;

8.采用非聚集索引,索引文件的数据域存储指向数据文件的指针。副索引与主索引基本一致,但是副索引不用保证唯一性。

Innodb表引擎:

1.默认事务引擎,最重要最广泛的存储引擎,性能非常优秀;

2.支持ACID的事务,支持事务的四种隔离级别;

3.支持行锁以及外键约束,因此可以支持写并发,采用MVCC多版本控制,来支持高并发;

4.不存储总行数;

5.所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

5.一个innodb引擎存储在一个文件空间(共享空间,表大小不受操作系统控制,一个表可以分布在多个文件里),也有可能为多个(设置为独立表空间,表大小受操作系统文件大小限制,一般为2G),受操作系统文件大小的限制。可以配置文件分开。

6.对主键查询的性能高于其他类型的存储引擎;主键索引采用聚簇索引(索引的数据域存储数据文件本身),副索引的数据域存储主键的值;因此从副索引查找数据,需要先通过副索引找到主键值,再访问副索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。

7.内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区。

8.通过一些机制和工具支持真正的热备份。

9.支持崩溃后的安全恢复。

10.不支持全文索引;innodb聚簇索引比myisam非聚簇索引 快。

mysql中Innodb支持的四种事务隔离级别名称,以及逐级之间的区别?

sql标准定义的四个隔离级别:

1. read uncommited 读到未提交数据

2. read committed 脏读 ,不可重复读

3. repeatable read 可重复读 默认

4. serializable 串行事务

char 和 varchar的区别?

1.char 和 varchar 类型在存储和检索方面有所不同。

2.char列长度固定为创建表时声明的长度,长度值范围是1到255. (定长,根据定义的字符串长度分配足够的空间)

3.当char值被存储时,它们被用空格填充到特定长度,检索char值时需删除尾随空格。

4.适合存储很短的字符串,或者所有值都接近同一个长度。

5.char长度 超出设定的长度会被截断。

6.对于经常变更的数据,char比varchar更好,char不容易产生碎片。

对于非常短的列,char比varchar在存储空间上更有效率,只分配真正需要的空间,更长的列会消耗更多的内存。

主键和候选键有什么区别?

表格的每一行都由主键唯一标识,一个表只有一个主键。

主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。

表格定义的所有索引?

索引是通过以下方式为表格定义的: show index from <tablename>;

like声明中的 % 和 _  是什么意思?

%对应于0个或更多字符, _  只是like语句中的一个字符。

如何在unix和mysql时间戳之间进行转换?

UNIX_TIMESTAMP是从mysql时间戳转换为unix时间戳的命令。

FROM_UNIXTIME是从时间戳转换为mysql时间戳的命令。

列对比运算符是什么?

在SELECT语句的列比较中使用 =,<>,<=,<,>=,>,<<,>>,<=>,AND,OR或like运算符。

BLOB和TEXT有什么区别?

1.尽量避免使用BLOB/text类型,查询会使用临时表,导致严重的性能开销。

2.BLOB是一个二进制对象,可以容纳可变数量的数据。 TEXT是一个不区分大小写的BLOB。

3.BLOB和TEXT类型之间的唯一区别在于对BLOB值进行排序和比较时,区分大小写,对TEXT值不区分大小写。

mysql_fetch_array 和 mysql_fetch_object 和 mysql_fetch_rows的区别是什么?

mysql_fetch_array()  将结果行作为关联数据或来自数据库的常规数据返回。

mysql_fetch_objetc()  从数据库返回结果行作为对象。

mysql 如何优化DISTINCT?  distinct

distinct在所有列上转换为group by,并与order by子句结合使用。

可以使用多少列创建索引?

最多可以创建16个索引列。

如果一个表有一列定义为TIMESTAMP,将发生什么?

每当行被更改时,时间戳字段将获取当前时间戳。

列设置为AUTO_INCREMENT时,如果在表中达到最大值,会发生什么情况?

会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。

怎样才能找出最后一次插入时分配了哪个自动增量?

LAST_INSERT_ID将返回由AUTO_INCREMENT分配的最后一个值,并且不需要指定表名称。

NOW() 和 CURRENT_DATE() 由什么区别?

NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。

CURRENT_DATE() 仅显示当前年份,月份和日期。

什么是非标准字符串类型?

1.TINYTEXT

2.TEXT

3.MEDIUMTEXT

4.LONGTEXT

什么是通用SQL函数?

1.CONCATAT(A,B)  连接两个字符串值以创建单个字符串输出。通常用于将两个或多个字段合并为一个字段。

2.FORMAT(X,D)  格式化数字X到D有效数字。

3.CURRDATE(), CURRTIME()  返回当前日期或时间

4.NOW()  将当前日期和时间作为一个值返回。

5.MONTH(), DAY(), YEAR(), WEEK(), WEEKDAY()  从日期值中提取给定数据。

6.HOUR(), MINUTE(), SECOND()   从时间值中提取给定数据。

7.DATEDIFF(A,B)  确定两个日期之间的差异,通常用于计算年龄。

8.SUBTIMES(A,B)   确定两次之间的差异。

9.FEOMDAYS(INT)   将整数天数转换为日期值。

mysql支持事务吗?

在缺省模式下,mysql是autocommit模式的,所有的数据库更新操作都会及时提交,所以在缺省情况下,mysql是不支持事务的。

但是如果你的mysql表类型是使用innodb tables 或BDB tables的话,你的mysql就可以使用事务处理,使用set autocommit模式,在非autocommit模式下,你必须使用commit来提交你的更改,或者用rollback来回滚你的更改。

mysql里记录货币用什么字段类型好?

NUMERIC和DECIMAL类型被mysql实现为同样的类型,这在SQL92标准允许。他们被用于保存值,该值的准确精度是极其重要的值,

例如与金钱有关数据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定。

例如:salary  decimal(9,2);

在这个例子中,9(precision)代表将被用于存储值的总得小数位数,而2(scale)代表将被用于存储小数点后的位数。

因此,在这种情况下,能被存储在salary列中的值得范围是从-9999999.99到9999999.99.

mysql有关权限的表有哪几个?

mysql服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。

列的字符串类型可以是什么?

set    blob  enum   char   text

mysql数据库做发布系统的存储,数据量增大的情况,怎么优化?

1.设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。

2.选择合适的表字段数据类型和存储引擎,适当的添加索引。

3.mysql库主从读写分离。

4.找规律分表,减少单表中的数据量提高查询速度。

5.添加缓存机制,比如memcached,apc等。

6.不经常改动的页面,生成静态页面。

7.书写高效率的sql.

锁的优化策略:

1.读写分离

2.分段加锁

3.减少锁持有的时间

4.多个线程尽量以相同的顺序去获取资源。

不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。

索引的底层实现原理和优化:

B+树    经过优化的B+树

主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此innodb 建议为大部分表使用默认自增的主键作为主索引。

什么情况下设置了索引但无法使用:

1.以 % 开头的like语句,模糊匹配; int 类型 like 不匹配。

2. or语句前后没有同时使用索引。

3.数据类型出现隐士转化(如varchar不加单引号的话可能会自动转换为int型)。

4.不等于 或 not  null

实践中如何优化mysql:

1.sql 语句以及索引的优化。

2.数据库表结构的优化。

3.系统配置的优化。

4.硬件的优化。

优化数据库的方法:

1.选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置not null,例如 省份、性别 最好适应enum.

2.使用连接join来代替子查询。

3.适用联合union来代替手动创建的临时表

4.事务处理

5.锁定表、优化事务处理

6.使用外键,优化锁定表

7.建立索引。

8.优化查询语句

简单描述mysql中,索引 ,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)?

索引是一种特殊的文件(innodb数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

普通索引(由关键字key或index定义的索引)的唯一任务是加快对数据的访问速度。

普通索引允许被索引的数据列包含重复的值,如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字unique把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。

主键:是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字primary key来创建。

索引可以覆盖多个数据列,如像index(columnA,columnB)索引,这就是联合索引。

索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。

数据库中的事务是什么?

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

事务特性:

1.原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

2.一致性或可串行:事务的执行使得数据库从一种正确状态转换成另一种正确状态。

3.隔离性:在事务正确提交之前,不允许把该事务对数据的任何改变提供任何其他事务。

4.持久性:事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,

原文地址:https://www.cnblogs.com/hanling/p/9972747.html

时间: 2024-11-06 21:20:02

mysql索引优化 mysiam和innodb区别?的相关文章

mysql索引优化

mysql 索引优化 >mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引. >越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间,处理起来更快. >简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂.在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间:以及用整型数据类型存储IP地址. >尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL.在MySQL中,含有空

MySQL索引优化-from 高性能MYSQL

Btree: 1. 尽量使用覆盖索引, 即三星索引 2. 多列索引如果带范围的话, 后续列不会作为筛选条件 3. 多列索引应选择过滤性更好的充当前缀索引 4. 尽量按主键顺序插入, 减少页分裂, 采用自增ID在高并发情况下, 可能造成明显征用, 或者更改innodb_autoinc_lock_mode配置. Hash: 1.只有精确匹配所有列的查询才有效, 对于每行数据, 引擎都会对所有索引列计算hash码 2. 只有memory才可以支持hash索引, innodb支持自适应hash索引, 但

【转载】MySQL索引优化

MySQL索引优化 原文链接 MySQL官方对索引的定义:索引是帮助MySQL高效获取数据的数据结构.索引是在存储引擎中实现的,所以每种存储引擎中的索引都不一样.如MYISAM和InnoDB存储引擎只支持BTree索引:MEMORY和HEAP储存引擎可以支持HASH和BTREE索引. 这里仅针对常用的InnoDB存储引擎所支持的BTree索引进行介绍: 一.索引类型 先创建一个新表,用于演示索引类型 CREATE TABLE index_table ( id BIGINT NOT NULL au

Mysql 索引优化分析

MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引,分析索引,使用索引,从而写出更高性能的sql语句.还在等啥子?撸起袖子就是干! 案例分析 我们先简单了解一下非关系型数据库和关系型数据库的区别. MongoDB是NoSQL中的一种.NoSQL的全称是Not only SQL,非关系型数据库.它的特点是性能高,扩张性强,模式灵

mySql索引优化分析

MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引,分析索引,使用索引,从而写出更高性能的sql语句.还在等啥子?撸起袖子就是干! 案例分析 我们先简单了解一下非关系型数据库和关系型数据库的区别.MongoDB是NoSQL中的一种.NoSQL的全称是Not only SQL,非关系型数据库.它的特点是性能高,扩张性强,模式灵活

MySQL索引优化步骤总结

在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sql执行计划,对sql进行优化. explain执行计划关键属性 select_type,possible_keys,key,rows (1) select_type 访问类型 system>const > eq_ref > ref > fulltext > ref_or_null

MySQL 索引优化原则

一.索引优化原则 1.最左前缀匹配原则,联合索引,mysql会从做向右匹配直到遇到范围查询(>.<.between.like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整. 2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优

Mysql 索引优化

索引的存储分类MyISAM 存储引擎的表数据和索引是自动分开存储的,各自是独一的一个文件Innodb 存储引擎的表数据和索引是存储在同一个表空间里面,但可以由多个文件构成.Mysql 目前不支持函数索引,但是能对列的前面某一部分进行索引例如 name 字段,可以只取 name 的前 4 个字符进行索引,可降低索引文件大小.Mysql> create index ind_company_name on company(name(4));说明:ind_company_name 索引名,company

mysql索引优化和sql语句优化

一.mysql索引分为btree索引和hash索引. btree索引是二叉树结构 先到索引树上找,再去根据索引到数据里边找数据. hash索引是memory引擎,精准查询非常快,如果查范围内(where>8),会比较慢.因为是无序的,无法使用前缀索引. 2.btree索引 建立索引,通常是经常用到做查询条件,做分组,做排序. 独立索引,单个建索引只能用一个索引,通常用联合索引. 如建了一个(a,b,c)的复合索引,那么实际等于建了(a),(a,b),(a,b,c)三个索引,因为每多一个索引,都会