我一直在研究MySQL索引键,以获得可能的数据库查询性能。我有一个尚未真正回答的具体问题。
您可以索引表格中的每个字段吗?或者您应该坚持使用WHERE
子句中的索引字段?
谢谢,对不起,如果之前已经回答过这个问题。
答案 0 :(得分:2)
数据库索引是一种提高数据速度的数据结构 以额外的代价在数据库表上进行检索操作 写入和存储空间以维护索引数据结构。索引 用于快速定位数据,而无需搜索每一行 每次访问数据库表时都有一个数据库表。索引可以 使用数据库表的一列或多列创建 快速随机查找和高效访问的基础 有序记录。
https://en.wikipedia.org/wiki/Database_index
您不应在表格的每个字段上创建INDEX
。仅使用用于搜索目的的列(即WHERE
,JOIN
)。
注意:索引有助于SEARCH
更快地放在桌面上,另一方面它必须执行额外的INSERT
,DELETE
和UPDATE
,因此会增加查询成本。< / p>
考虑方案:在这种情况下,3
或n
个3
或n
个查询同一个表中的// this draws a focus rect around the selected cell (DefaultDrawing=false)
procedure TForm2.sgDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
begin
if (gdFocused in State)or(gdSelected in State) then
begin
sg.Canvas.Pen.Color:=$00FFEECC;
sg.Canvas.MoveTo(Rect.Left,Rect.Top);
sg.Canvas.LineTo(Rect.Right,Rect.Top);
sg.Canvas.LineTo(Rect.Right,Rect.Bottom);
sg.Canvas.LineTo(Rect.Left,Rect.Bottom);
sg.Canvas.LineTo(Rect.Left,Rect.Top);
end
else
begin
sg.Canvas.Brush.Color:=clWhite;
sg.Canvas.FillRect(Rect);
end;
end;
procedure TForm2.sgMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
myrow:=sg.Row;
mycol:=sg.Col;
end;
procedure TForm2.sgMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
sg.Row:=myrow;
end;
或SUM
个不同字段如何选择索引?
这取决于您在表上执行特定查询的次数。如果您正在执行非常罕见的2个查询,则不要在这两列上创建索引。仅在要执行多次的查询中使用的列上创建索引。