我有一个包含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
列添加索引?它经常在我的选择查询中使用。
顺便提一下,我可以做些什么来加快这些疑问?有时需要很长时间并锁定表,以防止其他查询运行。
答案 0 :(得分:1)
如果您经常通过ip搜索,那么您可以创建索引。但是,由于这个原因,您的插入/更新可能需要更长的时间。不确定您的数据是如何构建的,但如果数据收集是通过ip进行的,那么您可以考虑通过ip对其进行分区。
答案 1 :(得分:1)
一个好的经验法则:如果WHERE子句中出现一列,则应该有一个索引。如果查询很慢,索引很有可能会有所帮助,特别是包含WHERE子句中所有字段的索引。
在MySQL中,您可以使用EXPLAIN关键字查看查询的近似查询计划,包括使用的索引。这可以帮助您找出查询的时间。
答案 2 :(得分:0)
是的,如果您在其他查询中使用它,请在ip
上创建索引。
这个使用column id
和ip
,因此我会在组合上创建一个索引。仅ip
上的索引无法帮助查询。
答案 3 :(得分:-1)
YES!几乎总是添加一个或两个或三个INDEX! (多列索引?)到每一列。
如果它今天不在WHERE子句中,你可以打赌它将是明天。 大多数数据都是WORM(一次读取多次写入),因此使读取最有效的是获得最大价值的地方。并且,正如许多人所指出的那样,关于在写入期间必须维护索引的论点只是愚蠢的。