Mysql MariaDB-我应该向表中添加索引吗?

Mysql MariaDB-我应该向表中添加索引吗?,mysql,database,mariadb,query-performance,Mysql,Database,Mariadb,Query Performance,最近我在检查我的系统日志,我注意到我的一些查询非常慢 我有一个存储用户活动的表。表结构是id int、user int、type int、object varchar、extra mediumtext和date timestamp 而且我只有id为BTREE的索引,唯一 我有以下查询的性能问题 SELECT DISTINCT object as usrobj from ".MV15_PREFIX."useractivities WHERE user='".$user_id.

最近我在检查我的系统日志,我注意到我的一些查询非常慢

我有一个存储用户活动的表。表结构是id int、user int、type int、object varchar、extra mediumtext和date timestamp

而且我只有id为BTREE的索引,唯一

我有以下查询的性能问题

SELECT  DISTINCT object as usrobj
    from  ".MV15_PREFIX."useractivities
    WHERE  user='".$user_id."'
      and  type = '3'
    limit  0,1000000" 
问题是,我是否应该将用户索引和id索引相同?我应该遵循的最佳实践是什么

此表被积极使用,其中有超过500k+行。网站平均在线并发用户数为2k

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

提前感谢您的建议

旁注:

mysqltuner的结果

一般性建议:

要调整的变量:


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

所以,是的,您可能会受益于用户索引和类型索引。您可能会从对用户、类型的索引中受益更多

学习如何进行查询也会让您受益。

对于该查询,以下两种方法都是最佳的:

INDEX(user, type)
INDEX(type, user)
单独的索引INDEXuser,INDEXtype可能不会那么好

MySQL的InnoDB只有BTree,没有哈希。无论如何,对于“点查询”,BTree基本上和Hash一样好,对于“范围”查询,它要好得多

索引


索引有助于选择和更新,有时是很多。使用它们。副作用很小,例如使用了额外的磁盘空间。

请注意,不按顺序进行限制是相当有意义的。所有调谐器建议与索引问题无关。我不确定索引所有内容是什么意思。每个索引都会增加数据库的大小。索引使一些select语句更快。它们使一些insert、update和delete语句变慢,因为dbms必须更改行并更新索引。但是,在这种情况下,更快并不一定意味着快,而较慢通常并不意味着慢。索引不是数据库管理员拥有的唯一数据库优化工具。别猜了。制定一个计划,衡量,做出改变,再次衡量。谢谢你,迈克,我已经开始测试这些改变了。到目前为止,还没有得到很大的改进,但了解了索引的重要性@威尔森豪克解释说,选择真的让我着迷,我不知道我能看到它是否在使用索引。添加迈克建议的索引后,速度更快,但并不像预期的那样。@Pelin:将Wilson Hauck的建议粘贴到您的问题中。显示创建表、显示索引、解释的输出SELECT@pelin从tbl_名称发布显示索引的文本结果;可能会显示您仍然需要为用户提供一个覆盖索引对。类型如果找不到,我可以给你ALTER命令。@pelin我们现在可以看到你有用户的复合索引,type。干杯请发布解释选择的结果…您的查询;我们仍然看不到SHOW CREATE TABLE tbl_name的结果;
max_connections (> 768)
wait_timeout (< 28800)
interactive_timeout (< 28800)
join_buffer_size (> 64.0M, or always use indexes with joins)
+--------------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| 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      |         |               |
+--------------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
INDEX(user, type)
INDEX(type, user)