帝国cms做微网站,网络营销策划方案1500字,收费网站素材,南京哪家网络公司做网站优化好1.索引创建注意点 选择合适的字段 1.不为 NULL 的字段 索引字段的数据应该尽量不为 NULL#xff0c;因为对于数据为 NULL 的字段#xff0c;数据库较难优化。如果字段频繁被查询#xff0c;但又避免不了为 NULL#xff0c;建议使用 0,1,true,false 这样语义较为清晰的短值或…1.索引创建注意点 选择合适的字段 1.不为 NULL 的字段 索引字段的数据应该尽量不为 NULL因为对于数据为 NULL 的字段数据库较难优化。如果字段频繁被查询但又避免不了为 NULL建议使用 0,1,true,false 这样语义较为清晰的短值或短字符作为替代。 2.被频繁查询的字段 我们创建索引的字段应该是查询操作非常频繁的字段。 3.被作为条件查询的字段 被作为 WHERE 条件查询的字段应该被考虑建立索引。 4.被经常频繁用于连接的字段 经常用于连接的字段可能是一些外键列对于外键列并不一定要建立外键只是说该列涉及到表与表的关系。对于频繁被连接查询的字段可以考虑建立索引提高多表连接查询的效率。 不合适创建索引的字段 1.被频繁更新的字段应该慎重建立索引 虽然索引能带来查询上的效率但是维护索引的成本也是不小的。 如果一个字段不被经常查询反而被经常修改那么就更不应该在这种字段上建立索引了。 2.不被经常查询的字段没有必要建立索引 3.尽可能的考虑建立联合索引而不是单列索引 因为索引是需要占用磁盘空间的可以简单理解为每个索引都对应着一颗 B树。如果一个表的字段过多索引过多那么当这个表的数据达到一个体量后索引占用的空间也是很多的且修改索引时耗费的时间也是较多的。如果是联合索引多个字段在一个索引上那么将会节约很大磁盘空间且修改数据的操作效率也会提升。 4.注意避免冗余索引 冗余索引指的是索引的功能相同能够命中 就肯定能命中 那么 就是冗余索引如name,city 和name 这两个索引就是冗余索引能够命中后者的查询肯定是能够命中前者的 在大多数情况下都应该尽量扩展已有的索引而不是创建新索引。 5.考虑在字符串类型的字段上使用前缀索引代替普通索引 前缀索引仅限于字符串类型较普通索引会占用更小的空间所以可以考虑使用前缀索引带替普通索引。 使用索引一定能提高查询性能吗? 大多数情况下索引查询都是比全表扫描要快的。但是如果数据库的数据量不大那么使用索引也不一定能够带来很大提升。 2.索引失效的因素 前四个为重点 查询条件不是最左前缀 如果你有一个复合索引联合索引MySQL可以使用该索引的最左前缀来优化查询。如果查询条件没有从索引的最左边列开始那么MySQL可能不会使用该索引。 查询条件中的函数操作 如果在查询条件中对索引列使用了函数或表达式如WHERE YEAR(date_column) 2023那么MySQL将无法使用索引因为索引是基于列的原始值建立的而不是基于函数的结果。 隐式类型转换 如果查询条件中的数据类型与索引列的数据类型不匹配并且MySQL必须进行隐式类型转换才能进行比较那么索引可能不会被使用。例如如果索引列是整型INT但查询条件中使用了字符串123则可能发生隐式类型转换。 LIKE语句的开头是通配符 当使用LIKE语句进行模糊匹配并且匹配模式的开头是通配符如%abcMySQL将无法使用索引来加速查询因为索引是基于列的固定前缀建立的。但是如果通配符不在开头如abc%则索引仍然可以被使用。 OR条件 在某些情况下如果查询条件包含OR并且OR连接的两个条件分别针对不同的索引列MySQL可能会选择不使用索引而执行全表扫描。这取决于查询的具体情况和MySQL的优化器决策。 索引统计信息过时 如果MySQL的索引统计信息如表的行数、索引的分布等过时那么优化器可能会基于不准确的信息来做出不使用索引的决策。在这种情况下可以通过运行ANALYZE TABLE命令来更新统计信息。 索引选择性低 如果索引列中的大多数值都是相同的即索引的选择性很低那么MySQL可能会认为使用索引的代价太高从而选择全表扫描。 查询优化器的决策 最终是否使用索引取决于MySQL查询优化器的决策。在某些情况下即使理论上可以使用索引优化器也可能因为各种内部因素如内存限制、查询缓存的考虑等而选择不使用索引。 最后了解和避免这些导致索引失效的因素可以帮助你优化MySQL查询的性能。在实际应用中可以通过EXPLAIN命令来查看MySQL如何执行你的查询并检查是否使用了索引。要使用 EXPLAIN 命令你只需在 SQL 语句前加上 EXPLAIN 关键字。