我应该在桌子上创建一个索引吗?

时间:2011-04-18 09:22:13

标签: mysql sql optimization indexing

我有一个包含7列的表,我在第一列是主要的,另一个是索引(外键)。

我的应用确实:

SELECT `comment_vote`.`ip`, `comment_vote`.`comment_id`, COUNT(*) AS `nb` FROM `comment_vote` 
SELECT `comment_vote`.`type` FROM `comment_vote` WHERE (comment_id = 123) AND (ip = "127.0.0.1")

是否值得在ip列添加索引?它经常在我的选择查询中使用。

顺便提一下,我可以做些什么来加快这些疑问?有时需要很长时间并锁定表,以防止其他查询运行。

4 个答案:

答案 0 :(得分:1)

如果您经常通过ip搜索,那么您可以创建索引。但是,由于这个原因,您的插入/更新可能需要更长的时间。不确定您的数据是如何构建的,但如果数据收集是通过ip进行的,那么您可以考虑通过ip对其进行分区。

答案 1 :(得分:1)

一个好的经验法则:如果WHERE子句中出现一列,则应该有一个索引。如果查询很慢,索引很有可能会有所帮助,特别是包含WHERE子句中所有字段的索引。

在MySQL中,您可以使用EXPLAIN关键字查看查询的近似查询计划,包括使用的索引。这可以帮助您找出查询的时间。

答案 2 :(得分:0)

是的,如果您在其他查询中使用它,请在ip上创建索引。

这个使用column idip,因此我会在组合上创建一个索引。仅ip上的索引无法帮助查询。

答案 3 :(得分:-1)

YES!几乎总是添加一个或两个或三个INDEX! (多列索引?)到每一列。

如果它今天不在WHERE子句中,你可以打赌它将是明天。 大多数数据都是WORM(一次读取多次写入),因此使读取最有效的是获得最大价值的地方。并且,正如许多人所指出的那样,关于在写入期间必须维护索引的论点只是愚蠢的。