Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySql中关闭索引与删除/替换索引?_Mysql_Indexing - Fatal编程技术网

在MySql中关闭索引与删除/替换索引?

在MySql中关闭索引与删除/替换索引?,mysql,indexing,Mysql,Indexing,有人告诉我,插入带有索引的表很慢。有没有办法绕过删除索引或创建/插入到tabel w/o索引,然后再重新创建索引,只需告诉mysql忽略插入上的索引,然后重新索引?简短回答: 对于选择,索引通常很有价值,而在插入过程中,索引的成本很低。不要关掉它们 长答案: 你得到的建议只适用于一些不太清楚的情况 当最初加载一个非常大的表时,有时最好在加载时没有索引(InnoDB中的主键除外),然后一次添加所有索引 一旦填充了表,转换索引(用于添加更多行)几乎是不现实的 “标志”(真/假、M/F、是/否/可能

有人告诉我,插入带有索引的表很慢。有没有办法绕过删除索引或创建/插入到tabel w/o索引,然后再重新创建索引,只需告诉mysql忽略插入上的索引,然后重新索引?

简短回答:

对于
选择
,索引通常很有价值,而在
插入
过程中,索引的成本很低。不要关掉它们

长答案:

  • 你得到的建议只适用于一些不太清楚的情况

  • 当最初加载一个非常大的表时,有时最好在加载时没有索引(InnoDB中的主键除外),然后一次添加所有索引

  • 一旦填充了表,转换索引(用于添加更多行)几乎是不现实的

  • “标志”(真/假、M/F、是/否/可能)列上的索引几乎从未使用过<代码>放下它

  • 如果你“索引了每一列”,那么我可以为你选择4个字母的单词。您的大多数索引将永远不会被使用

  • 如果您从未构建过“复合”索引(即包含多个列的索引),那么您的索引可能没有需要的那么好

  • 也就是说,拥有“几个”索引是好的


插入带有索引的表可能较慢。这在很大程度上取决于索引的数量、类型、I/O和CPU性能以及数据量。首先对它进行基准测试,看看它对您的情况是否重要。您是否理解为什么插入到索引较多的表中会很慢?是什么让你认为这个想法会更快?更重要的是,您是否衡量了查询的性能,并确定了导致查询速度变慢的具体原因?而不是重新设计整个数据库,因为有人曾经告诉过你一些模糊的概念可能比其他模糊的概念慢,测量您的性能并确定要解决的问题。@David我实际上测试了插入到非索引版本与索引版本的表中,而非索引版本的速度要快得多。所以,当我需要频繁地重新运行这个过程时,我正在努力弄清楚我到底发布了什么;删除索引、插入、重新创建索引会更好吗?或者有没有一种方法可以简单地告诉MySql‘插入时忽略索引’@user3649739:一般来说,这会“更慢”,因为表需要在插入后重新计算索引。您的建议是,您只需手动告诉表在插入后重新计算索引。我怀疑这会节省很多性能。现在还不清楚“忽略索引”能起到什么作用。如果索引没有更新,那有什么用?@David我读到的另一个解决方案就是在一个新的未索引表上创建一个表(Insert From),然后将索引添加回来,