广州手机网站制作天津网站建设揭秘
广州手机网站制作,天津网站建设揭秘,优秀企业网站的特点,百度百科官网登录命名规则#xff1a;表名_字段名1、需要加索引的字段#xff0c;要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系#xff0c;加索引不起作用4、符合最左原则尽量不要用or#xff0c;如果可以用union代替#xff0c;则一定要代替https://segmentf…命名规则表名_字段名1、需要加索引的字段要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系加索引不起作用4、符合最左原则尽量不要用or如果可以用union代替则一定要代替https://segmentfault.com/q/1010000003984016/a-1020000003984281联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段一个查询可以只使用索引中的一部份但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a |a,b| a,b,c 3种组合进行查找但不支持 b,c进行查找 .当最左侧字段是常量引用时索引就十分有效。两个或更多个列上的索引被称作复合索引。利用索引中的附加列您可以缩小搜索的范围但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似人名由姓和名构成电话簿首先按姓氏对进行排序然后按名字对有相同姓氏的人进行排序。如果您知 道姓电话簿将非常有用如果您知道姓和名电话簿则更为有用但如果您只知道名不姓电话簿将没有用处。所以说创建复合索引时应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时复合索引非常有用仅对后面的任意列执行搜索时复合索引则没有用处。http://blog.csdn.net/lmh12506/article/details/8879916当一个表有多条索引可走时, Mysql 根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引. 如:索引Index_1(Create_Time, Category_ID), Index_2(Category_ID)如果每天的数据都特别多, 而且有很多category, 但具体每个category的记录不会很多.当查询SQL条件为select …where create_time ….and category_id..时, 很可能不走索引Index_1, 而走索引Index_2, 导致查询比较慢.解决办法是将索引字段的顺序调换一下.http://www.cnblogs.com/krisy/archive/2013/07/12/3186258.html创建索引在执行CREATE TABLE语句时可以创建索引也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。1ALTER TABLEALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。ALTER TABLE table_name ADD INDEX index_name (column_list)ALTER TABLE table_name ADD UNIQUE (column_list)ALTER TABLE table_name ADD PRIMARY KEY (column_list)其中table_name是要增加索引的表名column_list指出对哪些列进行索引多列时各列之间用逗号分隔。索引名index_name可选缺省时MySQL将根据第一个索引列赋一个名称。另外ALTER TABLE允许在单个语句中更改多个表因此可以在同时创建多个索引。2CREATE INDEXCREATE INDEX可对表增加普通索引或UNIQUE索引。CREATE INDEX index_name ON table_name (column_list)CREATE UNIQUE INDEX index_name ON table_name (column_list)table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义索引名不可选。另外不能用CREATE INDEX语句创建PRIMARY KEY索引。3索引类型在创建索引时可以规定索引能否包含重复值。如果不包含则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引这保证单列不包含重复的值。对于多列惟一性索引保证多个值的组合不重复。PRIMARY KEY索引和UNIQUE索引非常类似。事实上PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY因为一个表中不可能具有两个同名的索引。下面的SQL语句对students表在sid上添加PRIMARY KEY索引。ALTER TABLE students ADD PRIMARY KEY (sid)4. 删除索引可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句DROP INDEX可以在ALTER TABLE内部作为一条语句处理语法如下。DROP INDEX index_name ON talbe_nameALTER TABLE table_name DROP INDEX index_nameALTER TABLE table_name DROP PRIMARY KEY其中前两条语句是等价的删除掉table_name中的索引index_name。第3条语句只在删除PRIMARY KEY索引时使用因为一个表只可能有一个PRIMARY KEY索引因此不需要指定索引名。如果没有创建PRIMARY KEY索引但表具有一个或多个UNIQUE索引则MySQL将删除第一个UNIQUE索引。如果从表中删除了某列则索引会受到影响。对于多列组合的索引如果删除其中的某列则该列也会从索引中删除。如果删除组成索引的所有列则整个索引将被删除。5查看索引mysql show index from tblname;mysql show keys from tblname;· Table表的名称。· Non_unique如果索引不能包括重复词则为0。如果可以则为1。· Key_name索引的名称。· Seq_in_index索引中的列序列号从1开始。· Column_name列名称。· Collation列以什么方式存储在索引中。在MySQL中有值‘A’(升序)或NULL(无分类)。· Cardinality索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数所以即使对于小型表该值也没有必要是精确的。基数越大当进行联合时MySQL使用该索引的机会就越大。· Sub_part如果列只是被部分地编入索引则为被编入索引的字符的数目。如果整列被编入索引则为NULL。· Packed指示关键字如何被压缩。如果没有被压缩则为NULL。· Null如果列含有NULL则含有YES。如果没有则该列含有NO。· Index_type用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。· Comment6什么情况下使用索引表的主关键字自动建立唯一索引如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)表的字段唯一约束ORACLE利用索引来保证数据的完整性如lc_hj(流程环节)中的lc_bhhj_sx(流程编号环节顺序)直接条件查询的字段在SQL中用于条件约束的字段如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)select * from zl_yhjbqk where qc_bh’???甼曀???7001’查询中与其它表关联的字段字段常常建立了外键关系如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)select * from zl_ydcf a,zl_yhdb b where a.jldb_bhb.jldb_bh and b.jldb_bh’540100214511’查询中排序的字段排序的字段如果通过索引去访问那将大大提高排序速度select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)select * from zl_yhjbqk where qc_bh’7001’ order by cb_sx(建立qc_bhcb_sx索引注只是一个索引其中包括qc_bh和cb_sx字段)查询中统计或分组统计的字段select max(hbs_bh) from zl_yhjbqkselect qc_bh,count(*) from zl_yhjbqk group by qc_bh什么情况下应不建或少建索引表记录太少如果一个表只有5条记录采用索引去访问记录的话那首先需访问索引表再通过索引表访问数据表一般索引表与数据表不在同一个数据块这种情况下ORACLE至少要往返读取数据块两次。而不用索引的情况下ORACLE会将所有的数据一次读出处理速度显然会比用索引快。如表zl_sybm(使用部门)一般只有几条记录除了主关键字外对任何一个字段建索引都不会产生性能优化实际上如果对这个表进行了统计分析后ORACLE也不会用你建的索引而是自动执行全表访问。如select * from zl_sybm where sydw_bh’5401’(对sydw_bh建立索引不会产生性能优化)经常插入、删除、修改的表对一些经常处理的业务表应在查询允许的情况下尽量减少索引如zl_yhbmgc_dfssgc_dfysgc_fpdy等业务表。数据重复且分布平均的表字段假如一个表有10万行记录有一个字段A只有T和F两种值且每个值的分布概率大约为50%那么对这种表A字段建索引一般不会提高数据库的查询速度。经常和主字段一块查询但主字段索引值比较多的表字段如gc_dfss(电费实收)表经常按收费序号、户标识编号、抄表日期、电费发生年月、操作 标志来具体查询某一笔收款的情况如果将所有的字段都建在一个索引里那将会增加数据的修改、插入、删除时间从实际上分析一笔收款如果按收费序号索引就已 经将记录减少到只有几条如果再按后面的几个字段索引查询将对性能不产生太大的影响。对千万级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 area’beijing’ 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 “%aaa%” 不会使用索引而like “aaa%”可以使用索引。7不要在列上进行运算select * from users whereYEAR(adddate)8不使用NOT IN和 和 ! 操作NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS(, , )代替id3则可使用id3 or id
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88402.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!