性能分析
索引为什么能提高检索性能呢?因为索引会对要检索的字段进行平衡数排序,查找的时候现在索引的平衡树种检索。这样就提高了检索效率。
具体体现下两个方面:
1.检索的范围小,只在索引的范围内检索。
2检索的算法优化,平衡树会提高检索效率。
而如果不用索引检索就要做全表遍历,全表检索效率的降低体现在如下两个方面
1.检索范围变大,全表检索。
2全表遍历是按照主键(id)建立的平衡树。索引对name的检索没有优化。
范围 | 算法优化(本例没有体现算法优化,但您应该能理解平衡树节约的效率) | |
有索引 | 索引平衡树 | 针对索引字段有平衡树 |
无索引 | 全表 | 平衡树对应的是主键 |
运行效果
代码
using System;
using System.Collections.Generic;
namespace 数据库索引模拟
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
DataBase db = new DataBase();
for (int i = 0; i < 10; i++)
{
db.insert(new DataTable("name" + i, "content" + i));
}
Console.WriteLine("普通查找");
DataTable dataTable = db.selectName("name5");
dataTable.desplay();
Console.WriteLine("通过索引查找");
DataTable dataTable2 = db.selectNameByIndex("name5");
dataTable2.desplay();
Console.ReadLine();
}
}
class DataTable
{
public DataTable(string name,string content)
{
this.name = name;
this.content = content;
}
public int id;
public string name;
private string content;
public void desplay()
{
Console.WriteLine("id:" + id + "name:" + name + "content:" + content);
}
}
class IndexName
{
public IndexName(string rName,int rIndex)
{
name = rName;
index = rIndex;
}
public string name;
public int index;
}
class DataBase
{
int index = 0;
List<DataTable> dataTables = new List<DataTable>();
List<IndexName> indexNames = new List<IndexName>();
public void insert(DataTable dataTable)
{
dataTable.id = this.index;
dataTables.Add(dataTable);
int indexNo = dataTables.IndexOf(dataTable);
indexNames.Add(new IndexName(dataTable.name, indexNo));
}
public DataTable selectNameByIndex(string str)
{
int indexNo = -1;
foreach(IndexName index in indexNames)
{
if (index.name.Equals(str))
{
indexNo = index.index;
}
}
return dataTables[indexNo];
}
public DataTable selectName(string str)
{
foreach(DataTable dataTable in dataTables)
{
if (dataTable.name.Equals(str))
{
return dataTable;
}
}
return null;
}
}
}