php - 如何确定您的表上是否有太多索引?

标签 php mysql database-design

如何知道我的 MySQL 表上是否有太多索引?

对于一些需要访问比较多的表,我在访问比较多的列上加了大概2-4个索引。但我如何才能知道它们是否弊大于利?

最佳答案

请注意,当您使用索引更新表时,唯一的性能会受到影响,因为当表中的数据发生变化时,必须维护所述索引。如果只是从表中进行选择,索引一般只能提高性能而不会降低性能。显然,您需要删除表中所有未使用的索引,因为它们会不必要地浪费磁盘空间,并且随着时间的推移表会发生变化,因此必须再次对其进行维护。

通常,您会希望检查您的执行计划,以查看根据您的查询实际使用了哪些索引。在执行此操作之前一定要收集统计数据以获得准确的结果。对执行计划进行这种检查很重要,b/c 即使您在列上有索引,优化器也可能不会根据列的基数等因素选择它。在查询具有高度选择性的大型表上(即你有 1M 用户,你查询的是 where userid = 'x' which will return 1 row),你会发现 select 的索引值得维护成本。小表,比如大陆名称表,通常不会从索引中获益太多,因为很多时候全表扫描比索引扫描更受欢迎。这是因为与直接读取少量数据相比,读取索引然后读取索引引用的数据 block 的成本更高。同样,这些东西需要根据您的特定表和需求进行验证,这一切都是通过查看执行计划来完成的。

如果您的查询适合这些类型的查询,则优先使用串联索引而不是单列索引。例如,如果您的 where 子句通常执行类似“where emp_fname = 'jim' and emp_lname = 'smith',则在 fname 和 lname 上创建一个串联索引,而不是在每一列上创建单独的索引。

关于php - 如何确定您的表上是否有太多索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2278159/

相关文章:

mysql 将两个日期字段与两个日期字符串进行比较

mysql - 理解 MySQL Workbench EER 图中的箭头提示

php - Products 表的结构,用于存储来自各个领域的产品详细信息

mysql - 限制行的大小是否有利于 MySQL 表的大小?

php - 检查字符串是否为日期的函数

php - PHP 中 PEAR 的用途

数组中的 PHP 变量

php - 如何根据 PHP 代码或 URL 方向的变化激活 CSS 属性?

mysql - 从表中选择具有重复字段的行,但优先考虑分组依据

mysql - 在 NiFi 中使用 ConvertRecord 处理 Null