Mysql在建立索引优化时需要注意的问题

设计好mysql的索引可以让你的数据库飞起来,大大的提高数据库效率,设计mysql索引的时候有以下几点注意:

1.创建索引

对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们发忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查询任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况下非要加索引不可,比如性别可能就只有两个值,建索引不仅没有优势,还会影响到更新速度,这被称为过度索引。

2.复合索引

比如有一条语句是这样的:select * from users where area = "beijing" and age = 22;

如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率,如果我们创建了(area,age,salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。

3.索引不会包含有null值的列

只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的,所以我们在数据库设计时不要让字段的默认值为null。

4.使用短索引

对串列进行索引,如果可能应该指定一个前缀长度,例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是唯一的,那么就不要对这个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

5.排序的索引问题

mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by的列是不会使用索引的,因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这列创建符合索引。

6.Like语句操作

一般情况下不鼓励使用like操作,如果非要使用不可,如何使用也是一个问题,like "%aaa%"不会使用索引而like "aaa%"可以使用索引。

7.不要在列上进行运算

select * from user where YEAR(adddate)

8.不适用NOT IN和操作

NOT IN 和操作都不会使用索引将进行全表扫描,NOT IN可以NOT EXISTS代替,

原文地址:https://www.cnblogs.com/Mr-Echo/p/9724686.html

时间: 2024-10-20 01:30:17

Mysql在建立索引优化时需要注意的问题的相关文章

MySQL如何利用索引优化ORDER BY排序语句

MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通过索引优化来实现MySQL的ORDER BY语句优化: 1.ORDER BY的索引优化.如果一个SQL语句形如:SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort];在[sort]这个栏位上建立索引就可以实现利用索引进行order by

为mysql数据库建立索引

前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过一些开发,但却对如何为数据库建立适当的索引所知较少,因此我起了写一篇相关文章的念头. 最普通的情况,是为出现在where子句的字段建一个索引.为方便讲述,我们先建立一个如下的表. Code代码如下: CREATE TABLE mytable ( id serial primary key, cate

[转]为mysql数据库建立索引

前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过一些开发,但却对如何为数据库建立适当的索引所知较少,因此我起了写一篇相关文章的念头. 最普通的情况,是为出现在where子句的字段建一个索引.为方便讲述,我们先建立一个如下的表. Code代码如下: CREATE TABLE mytable ( id serial primary key, cate

mysql 多列索引优化

Mysql所有的列都可以使用索引,.对相关列使用索引是提高SELECT操作性能的最佳途径.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少256字节.在索引中使用col_name(length)语法,可以创建一个只使用char和archar列的第一个length个字符的索引,按这种方式只索引列的前缀可以索引文件小的多.MyISAm和INNODb存储引擎还支持对blob和text列的索引,但是必须指定索引长度.fulltext索引用于全文搜索不

MySQL两表索引优化

建表语句 CREATE TABLE IF NOT EXISTS `class`( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NULL, PRIMARY KEY(`id`) ); CREATE TABLE IF NOT EXISTS `book`( `bookid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGN

mysql数据库添加索引优化查询效率

项目中如果表中的数据过多的话,会影响查询的效率,那么我们需要想办法优化查询,通常添加索引就是我们的选择之一: 1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 3.添加INDEX(普通索引) mysql>ALTER TABLE `ta

Solr6.5与mysql集成建立索引

首先在solrconfig.xml(我的是保存在/usr/local/tomcat/solrhome/mycore/conf/下)的<requestHandler name="/select" class="solr.SearchHandler">之上添加 (我的本地的solrconfig.xml中有这个/dtatimport 只需把class修改为下面的就可以了) <requestHandler name="/dataimport&qu

mysql in操作 索引优化的一个疑问

兹有 Index (A,B,C) --组合索引多字段是有序的,并且是个完整的BTree 索引. 下面条件可以用上该组合索引查询: A>5 A=5 AND B>6 A=5 AND B=6 AND C=7 A=5 AND B IN (2,3) AND C>5 下面条件将不能用上组合索引查询: B>5 --查询条件不包含组合索引首列字段 B=6 AND C=7 --查询条件不包含组合索引首列字段 下面条件将能用上部分组合索引查询: A>5 AND B=2 --当范围查询使用第一列,

(转)Mysql哪些字段适合建立索引

工作中处理数据时,发现某个表的数据达到亿条,所以要为表建索引提高查询性能,以下两篇文章总结的很好,记录一下,以备后用. 数据库建立索引常用的规则如下: 1.表的主键.外键必须有索引: 2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引: 5.索引应该建在选择性高的字段上: 6.索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引: 7.复合索引的建立需要进行仔细分析:尽量考