您好,登錄后才能下訂單哦!
mysql索引建立規則有哪些,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
mysql建立索引常用的規則如下:
1、表的主鍵、外鍵必須有索引;
2、數據量超過300的表應該有索引;
3、經常與其他表進行連接的表,在連接字段上應該建立索引;
4、經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;
5、索引應該建在選擇性高的字段上;
6、索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;
7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替: A、正確選擇復合索引中的主列字段,一般是選擇性較好的字段; B、復合索引的幾個字段是否經常同時以AND方式出現在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引; C、如果復合索引中包含的字段經常單獨出現在Where子句中,則分解為多個單字段索引; D、如果復合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復合的字段; E、如果既有單字段索引,又有這幾個字段上的復合索引,一般可以刪除復合索引;
8、頻繁進行數據操作的表,不要建立太多的索引;
9、刪除無用的索引,避免對執行計劃造成負面影響; 以上是一些普遍的建立索引時的判斷依據。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,索引對于插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低數據增加刪除時的性能,特別是對頻繁更新的表來說,負面影響更大
你現在種方法效率其實是差不多的,都非常低,極端低,最低。
一、如果不改進效率,只簡化程序,我有建議你對新聞類別進行二進制編碼,仍然使用features一個字段來表示,字段為整數類型,使用最低開始的四個二進制位是否為1來表示是否為圖片新聞、頭條新聞、首頁新聞、重要新聞,例如7(二進制的0111)表示具有頭條、首頁、重要三個屬性。查詢的時候使用位運算&來實現,圖片新聞、頭條新聞、首頁新聞、重要新聞的權重分別是8、4、2、1,這時候假若調用三條是圖片新聞的新聞時,直接可以用sql語句:
select * from news where features & 8=8 order by news_id desc limit 0,3;
假若調用三條是圖片新聞、并且重要新聞時,直接可以用sql語句:
select * from news where features & 9=9 order by news_id desc limit 0,3;
看見沒有,可以查詢具有一種屬性的,也可以查詢具有多種屬性的數據,程序很方便。
二、高效的辦法是另外建立表來記錄各類新聞,冗余保存數據到多個表中,需要查什么新聞就在哪一個表中查詢。但是程序會非常復雜,保存的時候要根據類別存儲到不同的表中,修改的最麻煩,如果修改類別還需要把數據從一個表移動到另外的表。當然,作為新聞這樣的應用,都是保存一次、修改一二次、查看成千上萬次,為了整體效率肯定是關鍵優化查詢代碼。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。