回答
不,一般意義上說,我不相信5.6甚至有這個功能。它是能夠僅使用一個塔的領先部分(該功能已經存在了很長一段時間),但在第二次或隨後的字符,或任何其他更復雜的函數不1開始。
例如,下面創建使用名稱的前五個字符的索引:
create index name_first_five on cust_table (name(5));
對於更復雜的表達式,可以由具有另一柱,用在可轉位數據實現類似的效果它,然後使用插入/更新觸發器來確保它正確填充。
除了冗餘數據的浪費空間外,這幾乎是一回事。
而且,雖然在技術上違反了3NF,這是通過使用觸發器的緩解,以保持數據同步(這一點是往往以增加性能完成)。
謝謝你...對於我的情況,我只需要使用字符串的前8個字符作爲索引。我可以使用:在cust_table(name(8))上創建索引name_first_8; – user836026
@ user836026:是的,應該有效。 – paxdiablo
@paxdiablo,請更新5.6'5.7'。如果你在其中添加報價8.0,那將會很棒。 – Adrian
從MySQL 5.7.5開始,使用新的Generated Columns這是可能的。
MySQL不支持這個,但有一個選擇。
1.從MySQL 5.7.6
您可以使用自動生成的列與它的指數保持子:
CREATE TABLE SomeTable (
id CHAR(10),
sub_id CHAR(8) AS SUBSTRING(id, 1, 8) STORED, INDEX(sub_id)
)
作爲Benjamin指出,InnoDB支持二級指標在虛擬列上,所以可以省略STORED關鍵字。事實上,虛擬列上的二級索引可能更可取。這裏更多的信息:Secondary Indexes and Generated Columns
2.之前的MySQL 5.7.6
您可以使用觸發器更新一列,上面有一個索引:
CREATE TABLE SomeTable (
id CHAR(10),
sub_id CHAR(8) , INDEX(sub_id)
);
CREATE TRIGGER TR_SomeTable_INSERT_sub_id
BEFORE INSERT
ON SomeTable FOR EACH ROW
SET NEW.sub_id = SUBSTRING(NEW.id, 1, 8);
CREATE TRIGGER TR_SomeTable_UPDATE_sub_id
BEFORE UPDATE
ON SomeTable FOR EACH ROW
SET NEW.sub_id = SUBSTRING(NEW.id, 1, 8);
請注意,根據[documentation](https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html),* InnoDB支持虛擬列*上的二級索引。所以你可以省略'STORED'關鍵字來使列變爲虛擬的,節省一些存儲空間,並且仍然有數據索引! – Benjamin
- 1. 可以使用MySQL FIND_IN_SET或相當於使用索引嗎?
- 2. 基於函數的索引
- 3. MySQL可以通過ORDER BY在RANGE QUERY中使用索引嗎?
- 4. MySQL的主索引可以是CHAR嗎?
- 5. 基於函數的數字列索引
- 6. 在COUNT DISTINCT上使用基於函數的索引?
- 7. 基於函數的索引XY座標
- 8. Oracle:創建基於函數的索引
- 9. 基於函數的索引和user_tab_cols
- 10. mysql索引基數
- 11. NHibernate可以在QueryOver中使用數據庫索引嗎?
- 12. Office.js中基於C#的excel函數可能使用JavaScript API嗎?
- 13. MYSQL可以使用WHERE ... IN查詢的索引嗎?
- 14. 我可以在mysql中使用聚合函數(LAST)嗎?
- 15. 我可以在Mysql Query中使用PHP函數嗎?
- 16. 我可以在mysql select語句中使用Php函數嗎?
- 17. 我可以在MySql中使用函數作爲默認值嗎?
- 18. 我可以在LIMIT偏移量中使用MySQL函數嗎
- 19. 我可以在mysql查詢列中使用PHP函數嗎?
- 20. 可以在WHERE子句中使用MySQL查詢函數嗎?
- 21. 基於數組索引使用PATCH真的很安全嗎?
- 22. 使用concat SQL的基於函數的索引
- 23. 使用LTRIM的基於Oracle函數的索引?
- 24. $都可以使用多鍵索引嗎?
- 25. 我可以使用lucene索引RDB嗎?
- 26. 我可以在mysql中使用觸發器以用於php嗎?
- 27. 我可以訪問apply()中使用的函數的行索引
- 28. Lucene.net可以用於基於標籤的搜索系統嗎?
- 29. 我可以在neo4j中搜索基於時間的事件嗎?
- 30. 如何使用基於函數的索引
你的意思是跳過第一個字符?我不認爲這是可能的:) –