win2008 iis建网站,天津优化加盟,快速开发平台免费版,网站维护与建设浅谈Mysql哪些字段适合建立索引,索引,字段,操作,数据库,数据 浅谈Mysql哪些字段适合建立索引 易采站长站#xff0c;站长之家为您整理了浅谈Mysql哪些字段适合建立索引的相关内容。 1 数据库建立索引常用的规则如下#xff1a; 1、表的主键、外键必须有索引#xff1b; 2、数… 浅谈Mysql哪些字段适合建立索引,索引,字段,操作,数据库,数据 浅谈Mysql哪些字段适合建立索引 易采站长站站长之家为您整理了浅谈Mysql哪些字段适合建立索引的相关内容。 1 数据库建立索引常用的规则如下 1、表的主键、外键必须有索引 2、数据量超过300的表应该有索引 3、经常与其他表进行连接的表在连接字段上应该建立索引 4、经常出现在Where子句中的字段特别是大表的字段应该建立索引 5、索引应该建在选择性高的字段上 6、索引应该建在小字段上对于大的文本字段甚至超长字段不要建索引 7、复合索引的建立需要进行仔细分析尽量考虑用单字段索引代替 A、正确选择复合索引中的主列字段一般是选择性较好的字段 B 、复合索引的几个字段是否经常同时以AND方式出现在Where子句中单字段查询是否极少甚至没有如果是则可以建立复合索引否则考虑单字段索引 C、如果复合索引中包含的字段经常单独出现在Where子句中则分解为多个单字段索引 D、如果既有单字段索引又有这几个字段上的复合索引一般可以删除复合索引 8、频繁进行数据操作的表不要建立太多的索引 9、删除无用的索引避免对执行计划造成负面影响 以上是一些普遍的建立索引时的判断依据。 索引的建立必须慎重对每个索引的必要性都应该经过仔细分析要有建立的依据。 因为太多的索引与不充分、不正确的索引对性能都毫无益处在表上建立的每个索引都会增加存储开销索引对于插入、删除、更新操作也会增加处理上的开销。 另外过多的复合索引在有单字段索引的情况下一般都是没有存在价值的相反还会降低数据增加删除时的性能特别是对频繁更新的表来说负面影响更大。 总的来说小型表肯定不建索引 或者数据库记录在亿条数据级以上还是建议使用非关系型数据库。 还有些特殊字段的数据库比如BLOBCLOB字段肯定也不适合建索引。 其实这个问题更感觉偏向于做软件项目的一种经验。 2、对千万级MySQL数据库建立索引的事项及提高性能的手段 一、注意事项 首先应当考虑表空间和磁盘空间是否足够。我们知道索引也是一种数据在建立索引的时候势必也会占用大量表空间。因此在对一大表建立索引的时候首先应当考虑的是空间容量问题。 其次在对建立索引的时候要对表进行加锁因此应当注意操作在业务空闲的时候进行。 二、性能调整方面 首当其冲的考虑因素便是磁盘I/O。物理上应当尽量把索引与数据分散到不同的磁盘上(不考虑阵列的情况)。逻辑上数据表空间与索引表空间分开。这是在建索引时应当遵守的基本准则。 其次我们知道在建立索引的时候要对表进行全表的扫描工作因此应当考虑调大初始化参数db_file_multiblock_read_count的值。一般设置为32或更大。 再次建立索引除了要进行全表扫描外同时还要对数据进行大量的排序操作因此应当调整排序区的大小。 9i之前可以在session级别上加大sort_area_size的大小比如设置为100m或者更大。 9i以后如果初始化参数workarea_size_policy的值为TRUE则排序区从pga_aggregate_target里自动分配获得。 最后建立索引的时候可以加上nologging选项。以减少在建立索引过程中产生的大量redo从而提高执行的速度。 MySql在建立索引优化时需要注意的问题 设计好MySql的索引可以让你的数据库飞起来大大的提高数据库效率。设计MySql索引的时候有一下几点注意 1创建索引 对于查询占主要的应用来说索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的或者说没有添加更为有效的索引导致。如果不加索引的话那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描如果一张表的数据量很大而符合条件的结果又很少那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可比如性别可能就只有两个值建索引不仅没什么优势还会影响到更新速度这被称为过度索引。 2复合索引 比如有一条语句是这样的 select * from users where areabeijing and age22; 如果我们是在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中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作尽量不要包含多个列的排序如果需要最好给这些列创建复合索引。 6like语句操作 一般情况下不鼓励使用like操作如果非使用不可如何使用也是一个问题。like “%a%” 不会使用索引而like “aaa%”可以使用索引。 7不要在列上进行运算 select * from users where YEAR(adddate) 8不使用NOT IN和操作 NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替id3则可使用id3 or id 添加索引示例: CREATE INDEX IDX_AUDITSTATUS ON [shanghaiDB].[dbo].[Activity](AUDITSTATUS) WITH(ONLINEON) CREATE INDEX IDX_ANUMMID ON [nantongDB].[dbo].[Orders](ANUM,MID) WITH(ONLINEON) CREATE INDEX IDX_SiteCode ON Usercenter.[dbo].MO(SiteCode) WITH(ONLINEON) CREATE INDEX IDX_AccessDt ON [all].[dbo].[AccessLog](AccessDt) WITH(ONLINEON) Create index注意n如果是大表建立索引切记加上ONLINE参数 这几天在做数据库的优化有个2亿记录的表发现需要添加一个联合索引结果就采用普通的create index index_name on tablename (entp_id,sell_date),结果悲剧了把所有的DML语句都阻塞了导致系统不能正常使用还好是晚上10点用户不是非常多1个小时候索引结束阻塞解决 上网查了一下如果加上 online参数后就可以在线做索引而不需要阻塞所有的DML语句血的教训拿出来与各位共勉具体online与不加online区别如下 DML操作对create index 的影响。 如果在create的时候有其他的进程在对这个index 所对应的数据进行DML操作create会受影响: SQL create table test (id number, name varchar2(20)); Table created. 然后重新开一个session: SQL insert into test values (1,lms); 1 row created. SQL create index t1 on test(id); create index t1 on test(id) * ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified 加online这个参数这个参数加上以后除了create过程中index 保持online状态Oracle还会在create index之前等待所有DML操作结束然后得到DDL锁开始create. SQL create index t1 on test(id) online; SQL commit; Commit complete. Index altered. 如果不commit,上面的操作就会一直hold。 所以以后create索引和rebuild索引的时候最好加上online。 到此这篇关于浅谈Mysql哪些字段适合建立索引的文章就介绍到这了,更多相关Mysql字段索引内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站以上就是关于对浅谈Mysql哪些字段适合建立索引的详细介绍。欢迎大家对浅谈Mysql哪些字段适合建立索引内容提出宝贵意见