HelpDatabase Reference › Ancestry_ICW

Ancestry_ICW Table

The Ancestry_ICW table stores In-Common-With (ICW) data — the “shared matches” relationships between people in your match list. Each row records that two matches share DNA with each other, along with how much. This is the raw material behind clustering tools: if many of your matches are all in common with one another, they likely descend from the same branch of your tree.

Each row is a directional pair: matchid and icwid are two test GUIDs that appear as shared matches, and the DNA columns describe the amount of DNA those two people share with each other. Both GUIDs join back to Ancestry_matchGroups.matchGuid.

Populated only when ICW gathering is enabled. ICW data is collected by visiting each match’s shared-matches page, which only happens when you run a gather with ICW enabled. A matches-only gather leaves this table empty.

Column Reference

ColumnTypeSourceDescription
Idint (PK)AutoAuto-incrementing primary key
matchidstringShared MatchesFirst match GUID in the pair. Joins to Ancestry_matchGroups.matchGuid. Stored uppercased.
icwidstringShared MatchesSecond match GUID — the person who is in common with matchid. Joins to Ancestry_matchGroups.matchGuid. Stored uppercased.
sharedCentimorgansdecimalShared MatchesShared cM between the two people in the pair. Nullable — present only when A* returns match-in-common detail.
confidencedecimalShared MatchesA*’s confidence value for the shared relationship. Nullable.
numSharedSegmentsintShared MatchesNumber of DNA segments the two people share. Nullable.
meiosisintShared MatchesMeiosis count (genetic distance) for the shared relationship. Nullable.
created_datestringAppDate the ICW row was written (yyyy-MM-dd)
The four DNA columns (sharedCentimorgans, confidence, numSharedSegments, meiosis) are all nullable and travel together. A* only supplies them when it returns match-in-common detail for the pair; otherwise the row records the in-common relationship alone, with these columns left null.

How It’s Populated

When ICW gathering is enabled, the browser visits each match’s shared-matches page. For every other match listed on that page, the application records the in-common relationship in both directions:

  1. Forward pair — one row with the visited match as matchid and the shared match as icwid.
  2. Reverse pair — one row with the two GUIDs swapped (matchid and icwid reversed).

Both rows carry the same DNA values when match-in-common detail is available. Storing both directions lets queries find shared matches from either side of the relationship without a self-join. GUIDs are normalized to uppercase (and stray quotes stripped from matchid) before insertion. Rows are collected in memory and written in a single bulk transaction per shared-matches page rather than one query at a time.

Two unique indexes enforce one row per ordered pair: (matchid, icwid) and (icwid, matchid). A later gather updates the existing row for a pair rather than duplicating it.

Data Preservation Rules

Re-gathering never overwrites good ICW detail with blanks. The DNA columns are treated as a unit when deciding whether to write:

  • Pair with DNA detail — if the incoming row has any of meiosis, confidence, sharedCentimorgans, or numSharedSegments, it is inserted or replaced. An existing row for the same pair has those four values refreshed; this is safe because the new row carries real data.
  • Pair without DNA detail — if the incoming row has none of those values, it is inserted only if the pair does not already exist (insert-or-ignore). This avoids overwriting a previously stored pair that already has DNA detail with an empty one.

In short: a row that knows the cM, confidence, segments, and meiosis can update what is stored, but a bare in-common pair will never erase richer data already on record.

Related Tables

  • Ancestry_matchGroups — the primary match table. Both matchid and icwid join to its matchGuid; the match’s name, shared cM with you, and notes live there.
  • Ancestry_RelationshipPredictions — ranked relationship predictions for a single match, complementing the shared-match signal here.
  • AncestryAncestorCouple — common ancestor couples, which often explain why a group of in-common matches cluster together.