搜尋

隨機推薦

28 十一月 2009
12 八月 2013

mysql查詢默認是不區分大小寫的 如:

select * from table_name where a like 'a%'
select * from table_name where a like 'A%'

效果是一樣的。

要讓mysql查詢區分大小寫,可以:

select * from table_name where binary a like 'a%'
select * from table_name where binary a like 'A%'

也可以在建表時,加以標識

create table table_name(
     a varchar(20) binary  
)

本文探討了提高MySQL 數據庫性能的思路,並從8個方面給出了具體的解決方法。

1、選取最適用的字段屬性

MySQL可以很好的支持大數據量的存取,但是一般說來,數據庫中的表越小,在它上面執行的查詢也就會越快。因此,在創建表的時候,為了獲得更 好的性能,我們可以將表中字段的寬度設得儘可能小。例如,在定義郵政編碼這個字段時,如果將其設置為CHAR(255),顯然給數據庫增加了不必要的空 間,甚至使用VARCHAR這種類型也是多餘的,因為CHAR(6)就可以很好的完成任務了。同樣的,如果可以的話,我們應該使用MEDIUMINT而不 是 BIGIN來定義整型字段。

另外一個提高效率的方法是在可能的情況下,應該儘量把字段設置為NOT NULL,這樣在將來執行查詢的時候,數據庫不用去比較NULL值。

對於某些文本字段,例如「省份」或者「性別」,我們可以將它們定義為ENUM類型。因為在MySQL中,ENUM類型被當作數值型數據來處理,而數值型數據被處理起來的速度要比文本類型快得多。這樣,我們又可以提高數據庫的性能。

MYSQL優化之加速 INSERT插入一條記錄花費的時間由以下幾個因素決定,後面的數字大致表示影響的比例:
  1. 連接:(3)
  2. 發送查詢給服務器:(2)
  3. 解析查詢:(2)
  4. 插入記錄:(1 x 記錄大小)
  5. 插入索引:(1 x 索引數量)
  6. 關閉:(1) 

這裡並沒有考慮初始化時打開數據表的開銷,因為每次運行查詢只會做這麼一次。

如果是 B-tree 索引的話,隨著索引數量的增加,插入記錄的速度以 log N 的比例下降。

 

假設a,b表各有10萬筆資料,兩者透過共同的Id欄位要作inner join 通常sql的語法會下:
SELECT *
FROM a
INNER JOIN b ON a.Id=b.Id
WHERE a.Id=1

但我在想, 語法上是先過濾資料再join,還是先join再過濾?? 或許考慮下面的語法會更佳:
SELECT *
FROM a
INNER JOIN b ON b.Id=a.Id AND b.Id=1
WHERE a.Id=1

Please publish modules in offcanvas position.