gpt4 book ai didi

mysql - MariaDB - 我应该为我的表添加索引吗?

转载 作者:可可西里 更新时间:2023-11-01 08:24:10 27 4
gpt4 key购买 nike

最近我在检查我的系统日志时发现我的一些查询非常慢。

我有一个存储用户事件的表。表结构为id(int)、user(int)、type(int)、object(varchar)、extra(mediumtext)和date(timestamp)

此外,我只有 id (BTREE, unique) 的索引。

我遇到以下查询的性能问题;

SELECT  DISTINCT object as usrobj
from ".MV15_PREFIX."useractivities
WHERE user='".$user_id."'
and type = '3'
limit 0,1000000"

问题是,我是否也应该将 userid 一起编入索引?我应该遵循的最佳做法是什么?

此表已被广泛使用,其中包含超过 50 万行。站点平均同时在线人数为2k~。

我问这个问题的原因是我不太擅长管理数据库,而且我在另一个有适当索引的表上有慢查询问题。

提前感谢您的建议。

旁注:

mysqltuner 的结果

一般建议:

Reduce or eliminate persistent connections to reduce connection usage
Adjust your join queries to always utilize indexes
Temporary table size is already large - reduce result set size
Reduce your SELECT DISTINCT queries without LIMIT clauses
Consider installing Sys schema from https://github.com/mysql/mysql-sys

要调整的变量:

max_connections (> 768)
wait_timeout (< 28800)
interactive_timeout (< 28800)
join_buffer_size (> 64.0M, or always use indexes with joins)

(我将设置 max_connections > 768,不太确定 timeouts 就我在 Stackoverflow 中阅读的主题/建议而言,我认为我不应该增加join_buffer_size 但我也非常希望能收到有关这些变量的反馈。)

编辑 - 显示索引结果;

+--------------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| ***_useractivities | 0 | PRIMARY | 1 | id | A | 434006 | NULL | NULL | | BTREE | | |
| ***_useractivities | 1 | user_index | 1 | user | A | 13151 | NULL | NULL | | BTREE | | |
| ***_useractivities | 1 | user_type_index | 1 | user | A | 10585 | NULL | NULL | | BTREE | | |
| ***_useractivities | 1 | user_type_index | 2 | type | A | 13562 | NULL | NULL | | BTREE | | |
+--------------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

最佳答案

大多数 PostgreSQL 索引经验法则适用于大多数 SQL 数据库管理系统。

https://dba.stackexchange.com/a/31517/1064

所以,是的,您可能会受益于user 索引和type 索引。您可能会从 user, type 对的索引中获益更多。

您将受益于学习如何 read an execution plan ,也是。

关于mysql - MariaDB - 我应该为我的表添加索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50216991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com