InnoDBテーブルにはvarchar
列があり、最後の10文字のみを検索します。列全体にインデックスを作成して検索where right(mycol, 10) = p_search
を実行すると、インデックスは使用されません。最後の10文字の検索クエリでインデックスを使用するようなインデックスを作成する方法はありますか?私はMySQLが左の部分に索引を作成することを提供していることを理解していますが、この状況では機能しません。MySQLの列の右側部分にのみインデックスがあります
答えて
MySQL 5.7を使用している場合は、カラムの右側を含む生成カラムを追加してそのインデックスを作成できます。
ALTER TABLE yourTable
ADD newCol CHAR(10) AS (RIGHT(oldCol, 10)) STORED,
ADD INDEX (newCol);
仮想列を使用するようにクエリを変更する必要はありません。 documentationは言う:
生成されたカラムがインデックス化されている場合、オプティマイザは列定義と一致するクエリ式を認識し、クエリが直接コラムを参照していない場合でも、クエリの実行中に、必要に応じて、カラムからインデックスを使用しています名前で。
したがって、WHERE RIGHT(oldCol, 10) = "abcdefghij"
と書くと、オプティマイザはそれをWHERE newCol = "abcdefghij"
のように扱い、インデックスを使用します。
古いバージョンを使用している場合は、これを実際の列として追加し、列が変更されるたびにトリガーを使用して更新することができます(実質的にはSTORED
仮想列が自動的に行います)。しかし、この場合、新しい列をテストするためにクエリを変更する必要があります。
そこにAlter Table Add Columnがありますか?私はテーブルを落としたくありません。構文エラーです。 –
私は間違いを犯しました.'AS(RIGHT(mycol、10))STORED'の前にデータ型が必要です。これはALTER TABLEで動作します。 – Barmar
- 1. ブートストラップ3の列オフセットは常に右側にあります
- 2. ブートストラップレイアウトを使用し、右側に余分な余分なスペースがあります
- 3. 私のウェブページの右側に空白があります
- 4. WebViewのHTMLコンテンツの右側に空白があります
- 5. 右側のパッドの文字列に0が入ります
- 6. カードビューの画像は右側に余白があります
- 7. ウェブサイトの右側に大きな空白があります
- 8. ブートストラップ3 - ページの右側にフッタがあります
- 9. ページの右側に空白があります
- 10. 3列の中央にCSSグリッドがあり、右側に1ピクセルのマージンがあります
- 11. 余分な灰色のスペースが右側にある
- 12. SQLiteのネストされた内部結合の右側からそのような列がありません
- 13. MySQLのフルテキスト検索右インデックス
- 14. ウェブサイトの右側に600〜1024ピクセルの範囲内のデッドスペースが余分にあります
- 15. UITableViewセクションのヘッダーがデフォルトの左側の代わりに右側にあります。
- 16. 右側にブートストラップメニューアイコンを配置する必要があります
- 17. Clojureの部分右
- 18. 100%幅の背景のみが右側に塗りつぶされます
- 19. 私のスクロールバーはブラウザの右側にはありませんか?
- 20. 列の右側のVlookup
- 21. 偏りの事業部 - 右サイドのみ
- 22. 私のページの右側に奇妙な隙間があります
- 23. width:100%のプロパティを持つdivの右側に空白があります
- 24. テキストがテキストの右側に配置されないCSSがあります
- 25. 部分インデックスまたはフィルタされたインデックスのためのmysqlの回避策?
- 26. mysqlの部分インデックス作成、逆インデックス作成
- 27. インデックスは配列の境界の外側にありましたが、配列にアイテムがある間は0インデックスを参照します
- 28. ページの右側と右側のスペースを取り除く方法
- 29. 部分文字列のインデックスを取得
- 30. Java:部分文字列インデックスの位置
2番目の列を作成し、最後の10文字をコピーし、最初の列ではなくその列にインデックスを付けますか?もちろん、列1を変更するすべてのコードも列2を更新する必要があります。 –
5.7がない場合は、関心がある場合は、 'REVERSE()'を使用するkludgeがあります。 –