Recently I have been working on a process that was using this code but it was not working because it looks for an index with a specific name. It was not working in this case because the name of the indexes was getting incremented as they were being created. For example, I was building an index on the table C5ST, field RelateId ([C5IX].[Relateid]) named I_C5IX_RelateId. That worked fine until we switched our process so now we keep multiple versions of some tables, each with a date-based suffix.
We now have tables name C5St_20110625 and C5St_20110626–the Index-name scheme, however was still creating I_C5IX_RelateId and it worked great on the first one. But when it created the second one, even on a different table, it was automatically name I_C5IX_RelateId_2 even though the name I_C5IX_RelateId was used when trying to create the index.
Before generating relates, our code checks to see if the key fields are indexed, and if they are not, builds an index. Because of the naming situation, multiple, duplicate indexes were being created. Probably not too harmful but it is a little messy.
So I re-wrote the code so that you pass the function the table name and field name that you want to check and it checks to see if there is an index existing for that field and return a Boolean. The one little wrinkle I put in is to account for indexes that span multiple fields–the ' if (iIndex.fields.Name.upper() == fieldname.upper()):' statement is checking the index to see if it is on a single field or multiple fields.
if not arcpy.Exists(tablename):
tabledescription = arcpy.Describe(tablename)
for iIndex in tabledescription.indexes:
if (iIndex.fields.Name.upper() == fieldname.upper()):