MySQL索引键

时间:2015-07-29 05:13:53

标签: mysql indexing

我一直在研究MySQL索引键,以获得可能的数据库查询性能。我有一个尚未真正回答的具体问题。

您可以索引表格中的每个字段吗?或者您应该坚持使用WHERE子句中的索引字段?

谢谢,对不起,如果之前已经回答过这个问题。

1 个答案:

答案 0 :(得分:2)

  

数据库索引是一种提高数据速度的数据结构   以额外的代价在数据库表上进行检索操作   写入和存储空间以维护索引数据结构。索引   用于快速定位数据,而无需搜索每一行   每次访问数据库表时都有一个数据库表。索引可以   使用数据库表的一列或多列创建   快速随机查找和高效访问的基础   有序记录。

https://en.wikipedia.org/wiki/Database_index

您不应在表格的每个字段上创建INDEX。仅使用用于搜索目的的列(即WHEREJOIN)。

注意:索引有助于SEARCH更快地放在桌面上,另一方面它必须执行额外的INSERTDELETEUPDATE,因此会增加查询成本。< / p>

考虑方案:在这种情况下,3n3n个查询同一个表中的// 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个查询,则不要在这两列上创建索引。仅在要执行多次的查询中使用的列上创建索引。