首页
学习
活动
专区
圈层
工具
发布

Mysql合理建立索引,索引优化

那么对数据库的优化又少了不索引的知识。 是的,建立索引能极大地提高查询的效率。那么你知道吗,如果合理建立索引,可以更大地榨出数据库的性能——也就等同于进一步提高查询效率。...建立索引的场景 索引不是越多越好,因为每次更新、插入数据,就需要对索引文件进行变动,会减低该类型操作的执行效率。 如果建立索引的字段太多,影响就会很大。 所以我们只在合理的字段上建立索引。...在经常用来当查询条件(where,on,group by,order by)的字段上建立索引。 在数据的维度比较大的字段上建立索引。...常见的可以用于建立索引的字段场景: ① 用户id 在订单表中的用户id字段上建立索引,根据用户id筛选订单,则会很快查询出用户的订单。...只在维度高的字段上建立索引,否则会使得数据比例过大,转为全表扫描。 优先对数据量比较小的字段建立索引,可以使索引文件更小,同时内存中也可以装载更多的索引键。

5.8K20

分区表建立索引

PARTITION pm11_ix VALUES LESS THAN (12)        PARTITION pm12_ix VALUES LESS THAN (MAXVALUE)); 分区表和一般表一样可以建立索引...3.1     局部索引分区的建立: SQL> create index dinya_idx_t on dinya_test(item_id)   2  local   3  (   4     partition...client           1  sorts (memory)           0  sorts (disk)           2  rows processed SQL> 3.2     全局索引分区的建立...全局索引建立时global 子句允许指定索引的范围值,这个范围值为索引字段的范围值: SQL> create index dinya_idx_t on dinya_test(item_id)   2  ...SQL>         本例中对表的item_id字段建立索引分区,当然也可以不指定索引分区名直接对整个表建立索引,如: SQL> create index dinya_idx_t on dinya_test

2.7K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL索引的建立方式

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。...拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。 索引分单列索引和组合索引。...单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。...创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。...因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间的索引文件。 ---- 普通索引 创建索引 这是最基本的索引,它没有任何限制。

    3.4K00

    Mysql常用的建立索引规则

    建立索引的规则 建立索引常用的规则如下: 表的主键、外键必须有索引; 数据量超过300的表应该有索引; 经常与其他表进行连接的表,在连接字段上应该建立索引; 经常出现在Where子句中的字段,非凡是大表的字段...,应该建立索引; 索引应该建在选择性高的字段上(枚举型字段不建索引); 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替: 正确选择复合索引中的主列字段...; 假如既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引; 频繁进行数据操作的表,不要建立太多的索引; 删除无用的索引,避免对执行计划造成负面影响; ​ 以上是一些普遍的建立索引时的判定依据...一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。...因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。 ​

    3.7K10

    浅谈索引的优缺点和建立索引的原则

    索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。...d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。...=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式 3.尽量选择区分度高的列作为索引,区分度的公式是...7.like 模糊查询中,右模糊查询(321%)会使用索引,而%321 和%321%会放弃索引而使用全局扫描 应该建立索引的情况 在经常需要搜索的列上,可以加快搜索的速度; 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构...不应该建立索引的情况 对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。

    3.8K10

    利用Lucene的IndexWriter建立索引(详解)

    利用Lucene的IndexWriter建立索引(详解) /*  * 建立索引,然后把建立后的文档添加到索引中去  * 提示先使用Document和Field把Field加入到Document中去,  ...* 接着把Document建立成为一个索引  * */ package comThree; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer...org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; public class BookIndex{ //创建索引的目录...private String INDEX_PATH = "E:\\Lucene项目\\索引目录"; Document  bookdoc1 = null; public BookIndex(){ bookdoc1...writer.close(); System.out.println("完成索引的创建并且存储完毕, 索引的存放位置在:" + INDEX_PATH); }catch(IOException e){ e.printStackTrace

    89210

    【说站】mysql索引建立的原则

    mysql索引建立的原则 1、尽量选择区分度高的列来建立索引。 2、频繁查询列适合建立索引。 3、遇到联合索引时,想想最左边的匹配原则。...4、like模糊查询时,%在前面时才会使用索引,另外两种情况都会使索引失效。...实例 select * from USER us where name l like ‘公众号程序员fly%’ //name上有索引的话会使用到name上的索引 select * from USER us... where name l like ‘%公众号程序员fly’ //name上有索引的话索引会失效转为全表扫描 select * from USER us where name l like ‘%公众号程序员...fly%’ //name上有索引的话索引会失效转为全表扫描 以上就是mysql索引建立的原则,希望对大家有所帮助。

    2.6K20

    Oracle索引的建立及优缺点

    2)索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率 3)索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表...; 4)索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响 5)索引对用户是透明的,无论表上是否有索引,sql语句的用法不变...SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = '表名' 知道了怎么用,下一步就该知道为什么这样用了 我们都是知道,建立索引是为了提高查询效率,那么,应该怎么建立索引呐...索引的建立原则 索引应该建立在WHERE子句中经常使用的列上。如果某个大表经常使用某个字段进行查询,并且检索的啊行数小于总表行数的5%,则应该考虑在该列上建立索引。...对于两个表连接的字段,应该建立索引。 如果经常在某表的一个字段上进行Order By的话,则也应该在这个列上建立索引。 不应该在小表上建立索引。

    1.7K40

    必应搜索不建立索引的解决记录

    前言 站点建立两年多了,几个常用的搜索引擎都搜录了我的站点,唯独必应迟迟不收录。 如果真的是我站点有问题的话,我改一改能符合收录要求也行。...但是每次使用必应站长工具检查的时候都显示我的站点没有问题,可以被建立索引(那你倒是建立索引啊!(╯▔皿▔)╯)。...信的大概内容就是:我遇到了哪些问题(网站检查没有问题,但是无法建立索引),需要哪些帮助(希望尽快帮我解决索引无法建立的问题,若是我的站点有问题的话,麻烦告知我详情) 信件发送后,必应给了我一封回信...然后我又等了一个星期,终于开始建立索引了。 在必应搜索中也逐渐能搜索到结果了。 最终历时将近一个月总算是解决了,看来给必应反馈还是很有用的(●’◡’●)。

    1.7K31

    性能优化-如何选择合适的列建立索引

    3、如何选择合适的列建立索引 1、在where从句,group by从句,order by从句,on从句中的列添加索引 2、索引字段越小越好(因为数据库数据存储单位是以“页”为单位的,数据存储的越多,...结论:由于customer_id 离散程度大,使用index(customer_id,staff_id)好 C、mysql联合索引 ① 命名规则 :表名_字段名 1、需要加索引的字段,要在where条件中...2、数据量少的字段不需要加索引 3、如果where条件中是OR关系,加索引不起作用 4、符合最左原则 ② 什么是联合索引 1、两个或更多个列上的索引被称作联合索引,又被称为是复合索引。...2、利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。...所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

    3.6K30

    【说站】mysql有哪些建立索引的方法

    mysql有哪些建立索引的方法 1、最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、 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的查询优化器会帮你优化成索引可以识别的形式 3、尽量选择区分度高的列作为索引,...= ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。...所以语句应该写成create_time = unix_timestamp(’2014-05-29’); 以上就是mysql建立索引的方法,大家学会后也试着建立索引吧。

    2.1K20

    外键要建立索引的原理和实验

    但发现有时开发人员提交SQL语句时未必会注意外键列需要定义索引,或者不清楚为什么外键列需要建立索引,网上一些所谓的“宝典”也会将外键列建索引作为其中的一条,包括TOM大师,曾说过: 导致死锁的头号原因是外键未加索引...(第二号原因是表上的位图索引遭到并发更新)。...2)如果删除了父表中的一行,整个子表也会被锁住(由于外键上没有索引)。 因此,无论从什么角度看,都有必要从原理上好好理解外键为何需要创建索引,或者说外键不创建索引会有什么问题?...(4) 只有外键创建索引,(1)中的操作才不会出现锁或hang状态,(2)中的操作才有可能使用索引。...通过以上实验,至少对外键不建立索引产生的影响,有了一些感性的认识,对外键为何要建立索引,应该有了更深入的理解。

    3.5K20

    建立索引后的代价到底有多大?

    前几天写的文章“MySQL 性能优化案例:覆盖索引”,介绍了使用覆盖索引优化查询的方式,受到了一个网友的批评 批评的内容为: “直接从索引放回数据很快是个常识,但是你这种单纯为了从索引返回而建索引我觉得不可取...,毕竟建索引需要使用更大的空间和影响修改性能,索引是用来找数据而不是用来直接返回结果的” 当时我没有在意,因为我不认同他的说法,优化后性能的确提高了,而且我认为建立联合索引后对空间的影响、修改数据性能的影响肯定是可以接受的...后来意识到这是一个学习态度的问题,这位网友是用自己的感觉进行评论,批评得完全没有依据,而我也是用自己的感觉回应这个评论,也没有依据,这种方式是不对的,应该用数据说明问题 所以我就实际测试了一下,看建立了联合索引后...,对空间、修改数据性能的影响到底有多大 测试方法 删除现有的索引,然后分别建立user_id的单列索引,和user_id及图片名称的联合索引 在这两种情况下查看索引空间占用大小,和插入相同记录条数所用的时间...测试 空间代价 单列索引 14.5M 联合索引 143M 写入性能代价 原有100万条数据,测试连续插入10条、1000条数据的时间差异 单列索引 插入10条,测试3次的结果为:

    1.7K70

    在MySQL中建立自己的哈希索引(书摘备查)

    在MySQL中,只有Memory存储引擎支持显式的哈希索引,但是可以按照InnoDB使用的方式模拟自己的哈希索引。这会让你得到某些哈希索引的特性,例如很大的键也只有很小的索引。...想法非常简单:在标准B-Tree索引上创建一个伪哈希索引。它和真正的哈希索引不是一回事,因为它还是使用B-Tree索引进行查找。然而,它将会使用键的哈希值进行查找,而不是键自身。...URL通常会导至B-Tree索引变大,因为它们非常长。...通常会按照下面的方式来查找URL表: select id from url where url='http://www.mysql.com'; 但是,如果移除url列上的索引并给表添加一个被索引的...,并且它会使用里面的值进行索引查找。

    3.2K30
    领券