补12.关于mysql的索引回顾

一、mysql中的索引是什么?

索引在mysql中也叫做“键”,是mysql存储引擎用于快速找到记录的一种标记,索引对于提高查询速度起到了非常关键的作用,当表中的数据量足够大时,索引的作用愈发重要。

创建和维护索引,需要耗费很大的硬盘空间以及时间,但是可以大大的提高查询速度。

二、在使用索引之前,你需要注意的。

  1. 尽可能的去使用一些简单的数据类型,整形的数据类型比起字符串,处理开销会小很多,因为字符串的比较更复杂。在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间;以及用整型数据类型存储IP地址。
  2. 尽量避免空值(NULL)推荐给每个字段都指定为not null(除非你想存储NULL)在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。
  3. 不要过度使用索引。
  4. 查询语句后面的where后面比较频繁的条件,比较适合用索引。
  5. 值过于集中的字段,不推荐添加索引,即使加了也不会提高多少效率(比如性别:男/女)

6. 切记不要在索引字段进行运算,例如:select * from users where YEAR(adddate)<2007,将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:select * from users where adddate<’2007-01-01′。这一个单引号可能会造成mysql近百倍的性能损失。

三、mysql中常用的索引类型。

  1. 普通索引:最基本的索引类型,没有任何的限制,仅仅加快查询速度。(比较常用)

MyIASM中默认的BTREE类型的索引,也是我们大多数情况下用到的索引。

1.1直接创建一个索引:

CREATE INDEX 索引名称 ON 表名(字段名)

1.2 在表结构上直接创建索引:

alter table 表名 add index/unique/fulltext[索引名](字段名)

1.3  创建主键索引:

alter table 表名 add primary  key (字段名)

1.4 删除一个索引:

删除一个非主键索引:

alter table 表名 drop index 索引名;

删除主键索引:

alter table 表名 drop primary key;

2.唯一索引(unique):字段内的值不可以重复。

与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。

3. 主键索引:字段内的值不能重复,虽然主键索引的字段不能有重复,但是唯一索引不一定是主键。

在一张表上只能有一个主键,但是可以有多个唯一索引。

4. 全文索引(full text):

FULLTEXT索引仅可用于 MyISAM 表;他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加。

将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。

–创建表的适合添加全文索引

CREATE TABLE `table` (

`id` int(11) NOT NULL AUTO_INCREMENT ,

`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,

`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,

`time` int(10) NULL DEFAULT NULL ,

PRIMARY KEY (`id`),

FULLTEXT (content)

);

–修改表结构添加全文索引

ALTER TABLE article ADD FULLTEXT index_content(content)

–直接创建索引

CREATE FULLTEXT INDEX index_content ON article(content)

5.多列索引:

多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。(个人认为,多列索引没有单列索引查询效率高)。

时间: 2024-10-24 20:54:37

补12.关于mysql的索引回顾的相关文章

补12.关于mysql的外键约束

一.什么是mysql中的外键(froeign key) 假如说有两张表,其中一张表的某个字段指向了另一张表的主键,这就可以称之为外键(froeign key). 在子表中增加一条记录时,需要确定是否有与父表相对应的记录. 如果父表没有对应的记录,那么子表(从表)无法插入这条数据. 下面是一个关于外键的示例: 1.首先创建一个主表,这个主表存放了班级信息. create table class ( id TINYINT PRIMARY KEY auto_increment, class_name

补12.关于mysql的多表查询

首先先准备两张表. 首先是员工信息表,表名为employee. create table employee( emp_id int primary key auto_increment not null, emp_name varchar(50), age int, dept_id int ); 然后在员工信息表中插入6条记录: insert into employee(emp_name,age,dept_id)values ('A',19,200), ('B',26,201), ('C',30

MySQL 二级索引会不会自动补齐主键

开篇:一直对Mysql 二级索引是否自动加入主键问题有怀疑,今天又时间就5.5和5.6分析了一把: mysql> select version(); +------------+ | version()  | +------------+ | 5.6.16-log | mysql> create table t9(     -> id int not null ,     -> a int ,     -> b int,     -> c int,     -> 

mysql之索引原理与慢查询优化

一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 2.为什么要有索引呢? 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应该是对查询性能优化最有效的手段了.

【转】【备忘录】MySQL性能优化的21个最佳实践 和 mysql使用索引

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被

ySQL性能优化的21个最佳实践 和 mysql使用索引

MySQL性能优化的21个最佳实践 和 mysql使用索引 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服

MySQL建立索引的注意事项

对于大数据量的表格,尤其是百万行以上的数据表,一定要对其建立索引,否则查询速度极慢.(参考后面的测试结果)建立索引时需注意: MySQL的索引有两种:单列索引(即在某一列上建索引).多列组合索引(即在多个列上建立同一个索引),不像SQL Server分聚集索引,非聚集索引. 如何建立单列索引: 格式:CREATE INDEX 索引名 on 表名(列名) 例如:CREATE INDEX idx_geoinfo_tiny_cabid ON geoinfo_tiny (cabid)#创建一个名为idx

【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类型的例,并将其索引 6. 千万不要 ORDER BY RAND() 7. 避免 SELECT * 8. 永远为每张表设置一个ID 9. 使用 ENUM 而不是 VARCHAR 10. 从 PROCEDURE ANALYSE() 取得建议 11. 尽可能的使用 NOT NULL 12. Prepare

MySQL性能优化的21个最佳实践 和 mysql使用索引【转载】

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被