SELECT
DATE_FORMAT( account_date, "%Y-%m-%d" )
FROM
table
WHERE
module= '2'
AND is_delete = '0'
AND code = 'S1006'
AND DATE_FORMAT( create_date, "%Y-%m-%d" ) = '2019-11-03'
GROUP BY
DATE_FORMAT( account_date, "%Y-%m-%d" ) order by null
sql如上,資料量太大,3000萬左右,想根據這個sql加個復合索引,create_date和account_date欄位用到了函式,是不是不能加到復合索引里面?
uj5u.com熱心網友回復:
是的,你可以多建個%Y-%m-%d格式的日期欄位來索引uj5u.com熱心網友回復:
您用到了DATE_FORMAT函式,所以,這兩個欄位加索引,也沒用。uj5u.com熱心網友回復:
函式列不走索引uj5u.com熱心網友回復:
兩個日期欄位都用了函式了,走不了索引了,可以給別的where條件中的欄位加索引,例如(code,module,is_delete),如果code重復率小的話uj5u.com熱心網友回復:
1:如果code選擇性高的話 可以建立索引 (code,is_delete,module,create_date, account_date) 之所有加上create_date 是防止回表.2:也可以修改SQL 建立索引(create_date,code,is_delete,module, account_date)
SELECT
DATE_FORMAT( account_date, "%Y-%m-%d" )
FROM
table
WHERE
module= '2'
AND is_delete = '0'
AND code = 'S1006'
AND create_date>='2019-11-03' and create_date<'2019-11-04'
GROUP BY
DATE_FORMAT( account_date, "%Y-%m-%d" ) order by null
這兩種方式 就看哪個條件過濾的資料多了.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/36798.html
標籤:MySQL
上一篇:mysql啟動之后,馬上停止,報錯:InnoDB: Assertion failure
下一篇:這個select陳述句該怎么寫啊
