mysql建设表及索引使用说明详解
二、mysql构建一个表,字段要求NULL,需要设置字段的默认值,默认值不为null。
三,MySQL构建表,如果字段相当于该字段中的外键,则应编入索引。
四、mysql构建表,在不同表、列类型、类型长度、是否为空、默认值是否一致的情况下,相同的属性值字段,否则,可以正确地使用索引进行相关性和比较。
五,当使用MySQL时,SQL语句只能使用一个表的一个索引,所有字段类型都可以进行索引,多个列索引的属性最多为15个。
六。如果可以在多个索引中选择,MySQL通常使用最小行索引和索引最高值的索引。
七、指数指标的建立(一,二,三),相当于索引的建立(一),(一,二)指数和指数(一,二,三指标)。
八,MySQL必须使用以下格式来使用类似的语法来使用索引:
SELECT * FROM T1,key_col like'ab %;
九、select count(*)的语法不执行select count(col_name)快速的声明没有条件,但它执行更快,条件语句。
十。在多个条件,在那里的条件,它必须是一个key_part属性多个列的索引必须包含key_part1.for各单项指标的指数,只有通过最少的线路使用。
十一。在多重条件下,每个条件都必须是一个有效的索引。
十二,订单后面的条件必须是相同索引的属性,并且订单顺序必须是一致的(例如,升序或降序)。
十三,所有按组分组都指向同一索引的属性,索引必须保留在其关键字的顺序中。
十四,联接索引,所有匹配的字段以及应该建立适当索引的地方。
十五。智能扫描全表使用力指数通知MySQL,使用索引的效率更高。
十六、定期分析表tbl_name更新扫描表的关键词分布。
十七。定期使用慢速日志检查语句,执行解释,并分析可能改进的索引。
十八,如果条件允许,设置较大的key_buffer_size和query_cache_size值(全局参数)和sort_buffer_size值(Session变量不超过4m)。
评论
主键的名称使用以下规则:
主要的名字开始与pk_,其次是名称的表中的主键所在。主键名称长度不超过30个字符。如果太长,可简称为表的名称,缩写规则和表名称的缩写规则。主要的名字是小写英文字表达。
下面的规则用于命名外键:
外键的名字开始与fk_,其次是外键和相应的主表名,表名(不t_)。子表的名称和父表名(_)分离自己的下划线。外部关键名称长度不超过30个字符。如果太长,它可以缩写为表的名称,缩写规则和表名称的缩写规则,外键的名字是小英语单词表达。
索引的命名使用以下规则:
1)索引名用小写英文字母和数字表示,索引名的长度不能超过30个字符。
2)对应索引的主键和同名主键。
3)独特的电缆开始与uni_,其次是表名。一般电缆始于ind_,其次是表名。
4)如果索引的长度太长,可以缩写为表的名称。
指数相关的语法
例:
创建logaudit_log指数log_url(URL);
显示指数从logaudit_log
在logaudit_log下降指数log_request_time
SQL执行效率检测mysql解释
说明MySQL如何使用索引处理SELECT语句和连接表。您可以帮助选择更好的索引并编写更优化的查询语句。
使用该方法,在SELECT语句之前添加解释。
如:解释选择的姓氏,first_name形成一张,B =数据
分析结果如下:
桌上型possible_keys关键| | | | key_len | REF |行|额外
解释栏的解释:
表
显示该行的数据是关于哪个表的。
型
这是一个重要的栏目,显示什么类型的连接使用。最糟糕的连接类型是const,eq_reg,参考范围,indexhe,和所有
possible_keys
显示可应用于此表的索引。如果它是空的,则没有可能的索引。您可以从相关域的WHERE语句中选择适当的语句。
关键
索引的实际使用。如果NULL,则不使用索引。在一些情况下,MySQL将选择优化索引索引。
指数(indexname)强制使用索引或强迫MySQL忽略指数忽略指数(indexname)
key_len
所用索引的长度。在没有精度损失的情况下,越短越好。
裁判
如果可能的话,索引中的哪个列被使用,是一个常数。
排
MySQL认为必须检查以返回请求数据的行数。
额外的
关于MySQL如何解析查询的更多信息,可以在表4.3中讨论,但坏的例子,我们可以看到这里使用的是临时用filesort,意义MySQL不能使用在所有的指标,结果是缓慢的检索。
附加列返回的说明的含义。
不同的
一旦MySQL找到一条与该行相匹配的行,它就不再搜索了。
不存在
MySQL一旦找到与左连接标准相匹配的行,就优化左连接,
没有更多的搜索
每个检查范围
记录(指数图:#)
没有理想的索引,所以从前表中的每一行,MySQL检查哪个索引被使用,并使用它返回表中的行,这是使用索引最慢的连接之一。
filesort使用
当你看到这个的时候,查询需要optimized.mysql需要采取额外的步骤来找出如何返回的行进行排序,排序的所有行根据连接类型和所有行行指针排序键值和匹配条件的商店。
使用索引
仅从索引信息中返回列数据,而不读取实际操作。当表的所有请求列都是同一索引的一部分时,就会出现这种情况。
使用临时
当您看到这一点时,查询需要优化。
使用的地方
WHERE子句用于限制哪些行与下表匹配或返回给用户。如果不希望返回表中的所有行,并将类型全部或索引连接,则会发生这种情况,或者查询是一个问题。
不同类型连接的解释(按效率排序)
系统
该表只有一行:系统表。这是常量连接类型的特殊情况。
const
表中记录的最大值可以与查询匹配(索引可以是主索引或唯一索引)。因为只有一行,该值实际上是一个常数,因为MySQL首先读取值并将其作为常数。
eq_ref
在连接时,当MySQL查询时,从表中的表中读取表中的记录。当查询索引时,它被用作主键或键。
裁判
此连接类型时才会发生的查询使用,不唯一或主键或是这些类型的部件的键(例如,使用最左前缀)。每行前面的桌子,所有的记录将从表中读取出来的。这种类型在很大程度上依赖于匹配的记录根据指数越少越好的数量
范围
此连接类型使用索引返回范围内的一行,例如使用>或
常见问题解答
一
该表包含10万条记录,还有一场DateTime类型。
数据声明:
SELECT * FROM my_table哪里created_at < '2010-01-20;
通过解释检查,发现类型为全部,键为null,并且根本没有索引。
可以肯定的是,这created_at字段索引。
是什么原因
使用select count(*)看,符合条件的记录总数,这比6w!!
难怪它不使用索引。那个时候,指数是没有意义的。它就像一个有10万条记录的用户表。这是一个性别领域,不是男性或女性。在这个字段中设置索引是错误的决定。
上述声明的一点变化:
SELECT * FROM my_table哪里created_at之间'2009-12-06'and '2010-01-20;
这个问题已经解决了!
只有几百项,类型的解释范围,关键是created_at,和额外的使用。
索引的目标是最小化结果集,以便快速查询。
6万条记录占记录总数的一半,索引没有意义,所以MySQL放弃了索引的使用。
这类似于设置性别字段和添加索引。当你想挑出所有男性记录时,合格记录的数量大约占总数的一半。MySQL也不会使用这个索引。
越是独特的字段,使用索引的效果越好。
当设置一个联合索引时,唯一值越多,它就越应该放在左边。