Vb.net SQLite搜索太慢了

Vb.net SQLite搜索太慢了,vb.net,sqlite,Vb.net,Sqlite,这是我从SQLite数据库中搜索的代码: flResults.Controls.Clear() If con.State = ConnectionState.Closed Then con.Open() End If Dim Querytxt As String = "Select * from trancebeats Where Cat LIKE '%" & txtSearch.Text & "%' OR

这是我从SQLite数据库中搜索的代码:

flResults.Controls.Clear()
        If con.State = ConnectionState.Closed Then
            con.Open()
        End If
        Dim Querytxt As String = "Select * from trancebeats Where Cat LIKE '%" & txtSearch.Text & "%' OR  Title LIKE '%" & txtSearch.Text & "%' OR Artist LIKE '%" & txtSearch.Text & "%' OR Album LIKE '%" & txtSearch.Text & "%' OR Year LIKE '%" & txtSearch.Text & "%' OR Genre LIKE '%" & txtSearch.Text & "%' OR Publisher LIKE '%" & txtSearch.Text & "%' OR Site LIKE '%" & txtSearch.Text & "%' Group By Album Order By Album"
        Dim Adp As SQLiteDataAdapter = New SQLiteDataAdapter
        Dim Cmd As SQLiteCommand = New SQLiteCommand
        Dim TableSRC As New DataTable
        TableSRC.Rows.Clear()
        Dim i As Integer
    With Cmd
        .CommandText = Querytxt
        .Connection = con
    End With

    With Adp
        .SelectCommand = Cmd
        .Fill(TableSRC)
    End With

    If TableSRC.Rows.Count > 0 Then
        lblResultsFound.Text = TableSRC.Rows.Count & "  Results founds"
        For i = 0 To TableSRC.Rows.Count - 1
            Threading.Thread.Sleep(10)
            Dim pic As New PictureBox
            Dim lblArtist As New Label
            Dim lblAlbum As New Label
            Dim lblLabel As New Label
            Dim lblCat As New Label
            Dim fl As New Panel
            pic.Size = New Size(75, 75)
            pic.SizeMode = PictureBoxSizeMode.StretchImage
            pic.Cursor = Cursors.Hand
            pic.BorderStyle = BorderStyle.Fixed3D
            pic.Tag = TableSRC.Rows(i)("Cat")
            pic.Name = TableSRC.Rows(i)("Cat") & "pic"
            pic.Location = New Point(7, 7)
            Try
                If System.IO.File.Exists(TableSRC.Rows(i)("Cover")) Then
                    Dim xx As Image
                    Using str As Stream = File.OpenRead(TableSRC.Rows(i)("Cover"))
                        xx = Image.FromStream(str)
                    End Using
                    pic.Image = xx
                End If
            Catch ex As Exception

            End Try
            lblAlbum.AutoEllipsis = True
            lblArtist.AutoEllipsis = True
            lblLabel.AutoEllipsis = True
            lblCat.AutoEllipsis = True
            lblAlbum.AutoSize = False
            lblArtist.AutoSize = False
            lblLabel.AutoSize = False
            lblCat.AutoSize = False
            lblAlbum.Size = New Size(100, 15)
            lblArtist.Size = New Size(100, 15)
            lblLabel.Size = New Size(100, 15)
            lblCat.Size = New Size(100, 15)
            lblAlbum.Text = TableSRC.Rows(i)("Artist")
            lblArtist.Text = TableSRC.Rows(i)("Album")
            lblLabel.Text = TableSRC.Rows(i)("Publisher")
            lblCat.Text = TableSRC.Rows(i)("Cat")
            fl.Size = New Size(200, 95)
            fl.BackColor = System.Drawing.Color.SteelBlue
            fl.Controls.Add(pic)
            fl.Controls.Add(lblArtist)
            fl.Controls.Add(lblAlbum)
            fl.Controls.Add(lblLabel)
            fl.Controls.Add(lblCat)
            fl.Name = TableSRC.Rows(i)("Cat") & "fl"
            AddHandler pic.Click, AddressOf CatClick
            lblArtist.Location = New Point(87, 12)
            lblAlbum.Location = New Point(87, 30)
            lblLabel.Location = New Point(87, 66)
            lblCat.Location = New Point(87, 48)
            AddHandler fl.Click, AddressOf flClick
            AddHandler lblArtist.Click, AddressOf flClick1
            AddHandler lblAlbum.Click, AddressOf flClick1
            AddHandler lblLabel.Click, AddressOf flClick1
            AddHandler lblCat.Click, AddressOf flClick1

            flResults.Controls.Add(fl)
        Next
    Else
        Dim lblNothing As New Label
        lblNothing.Text = "No Results Found!!"
        lblNothing.ForeColor = System.Drawing.Color.White
        flResults.Controls.Add(lblNothing)
    End If
我有5000多行

当我进行搜索时,需要花费时间来放置结果

是我的代码错了还是我必须改变搜索方式


当它告诉我结果时。。。例如,它将显示100个结果……我必须等到它显示完结果,然后才能找到我正在搜索的内容……

所有这些通配符都需要一些时间来搜索,即使是在一个小记录集上,因为每个通配符都涉及一个完整的表扫描

加快SQL查询速度通常需要对相关列进行索引。索引列的搜索速度比非索引列快得多。不过,在搜索词的开头使用通配符会抵消索引所带来的好处

为了获得索引的好处,您可以将每列存储两次,一次字符串反转,对所有列进行索引,然后搜索
“…像“term%”这样的字段或像“term%”这样的字段反转…”“
,但是为了这一个查询,需要添加很多复杂性;我只会在这一个查询必须非常快的情况下这样做


您还可以使用其他(可能更好)选项——SQLite有一个FTS(全文搜索)扩展,您可能需要查看它:

为什么不在查询中指定一列呢,朋友

也许在表单上放置一个包含表中所有列的组合框,然后每当用户搜索时,程序都会运行一个查询,该查询的表基于用户选择的组合框

例如:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

          Combobox1.Items.Add("Cat")
          Combobox1.Items.Add("Title")
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

     Dim Querytxt As String = "Select * from trancebeats Where " & _
     combobox1.Text & " LIKE '%" & txtSearch.Text & _
     "%' Group By Album Order By Album"

     End Sub

在这里,您可以让用户指定程序应该在哪个列中查找数据。

这是我首先做的。。。。但后来我看到我必须指定我必须搜索的位置。。。。然后我这样做是为了更快地搜索,并且不指定搜索的位置…但是在表中搜索要比指定列花费更多的时间..很抱歉,我没有得到任何结果。你是什么意思?我一开始是按照你说的做的,但是当我想搜索的时候,我会选择我最想搜索的地方,而且我有其他人在使用这个应用程序,这将更加不同…所以我让搜索活动在所有表中搜索,而不选择列…再次感谢你的回答其他人会有困难吗在你的团队中?如果他们想搜索,他们通常会指定搜索的位置。。。。例如…我的应用程序是关于音乐的,我有5000多首歌曲,每首歌曲都是表格中的一行,表格中有10列…我不能为10列创建组合框,当他们搜索时,他们不会记得选择搜索的位置,他们告诉我要更改it@Brad谢谢你的回答。。。。。我安装了Winamp播放器。。。我喜欢数据库和它搜索音乐的方式,但它太重了。。。我试着用Excel打开他的数据库,我发现他的列比我的多。。。。它是如何工作和快速搜索的??。。。。。在Winamp中,当您按下搜索栏中的任意键时,它会自动搜索。。。。我更喜欢它SQLite中“喜欢”和“匹配”的区别是什么???